#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/