Ссылка на диапазон с использованием номера столбца, а не буквы столбца

#vba

Вопрос:

Я чувствую, что это должно быть просто, потому что я нашел миллион ссылок в Интернете о том, как это сделать. Я попробовал несколько разных комбинаций, но безрезультатно.

Я просто пытаюсь ссылаться на столбец, используя переменную LastCol в пределах диапазона, но продолжаю получать ошибку ниже. Ошибка возникает в строке, помеченной знаком ->. Я пробовал несколько различных вариантов, в том числе использовал буквенное имя для первого параметра диапазона с двоеточием, запятой, перемещал кавычки, ставил «.» перед ссылками на ячейки и т. Д. Каждый раз, когда я смотрю, как это сделать в Интернете, мне кажется, что я делаю это правильно.

сообщение об ошибке

Это мой код:

 Public Sub cmb_orgname_Change()

Dim wb As Workbook
Dim sht As Worksheet
Dim orgname As String
Dim org_position As Double
Dim LastCol, LastRow As Integer
Dim prod_range As Range
Dim cell As Range
Set sht = Sheet1

'get the value of the selected org name from the dropdown
orgname = sht.OLEObjects("cmb_orgname").Object.Value

'find the last column for the number of org names, currently this is not being utilized
LastCol = Sheet3.Range("F2").End(xlToRight).Column

If orgname <> "" Then
    Call Clear_ComboBox
    -> org_position = WorksheetFunction.Match(orgname, Sheet3.Range(Cells(2, 6), Cells(2, LastCol)), 0)   6
    LastRow = Sheet3.Cells(Sheet3.Rows.Count, org_position).End(xlUp).Row
    Set prod_range = Sheet3.Range(Sheet3.Cells(3, org_position), Sheet3.Cells(LastRow, org_position))
    
    
    For Each cell In prod_range
        With sht.OLEObjects("cmb_prodname").Object
            Dim test As String
            test = CStr(cell.Value)
            .AddItem CStr(cell.Value)
        End With
    Next cell
    
End If

End Sub
 

Комментарии:

1. Попробуйте поставить Sheet3 перед каждым Cells , как у вас на prod_rangeprod

2. Я пробовал это сделать, но, к сожалению, это не сработало. Но я только что кое-что придумал! Я собираюсь опубликовать ответ.

Ответ №1:

после множества различных итераций различных поисков я нашел функцию под названием ADDRESS (), которая появляется после диапазона. С помощью функции АДРЕСА я смог заставить это работать! В принципе, все, что мне нужно было сделать, это изменить свою линию на следующую:

org_position = WorksheetFunction.Match(orgname, Sheet3.Range("F2:" amp; Sheet3.Cells(2, LastCol).Address()), 0) 6

И теперь все идет гладко. Это страница, на которой я нашел функцию АДРЕСА и информацию: https://software-solutions-online.com/use-vba-range-address-method/