Это вполне возможно - возможно, даже - что я чего-то не хватает, но для жизни меня не могу понять, что.Неисправность «Требуемый объект» вопрос
У меня возникла ситуация, когда мне нужна структура, определенная пользователем (или класс, я думаю, но я стараюсь оставаться простой) для переноса двух связанных битов данных: имя столбца и номер столбца, где живут определенные данные ,
Однако, когда я запускаю код, я получаю «объект требуется» ошибка при первой попытке присваивания:
Вот укороченный список:
Public Type ConfigDataType
ltr As String
nbr As Integer
End Type
Sub MacroWorkbookName()
Dim ProjCol, WBSCol, ResCol, ValCol As ConfigDataType
Call GetParameters(ProjCol, WBSCol, ResCol, ValCol)
End Sub
Sub GetParameters(ByRef P, W, R, V As ConfigDataType)
Dim MacroWorkBook As String
MacroWorkBook = ThisWorkbook.Name
' The next line triggers the error
P.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(6, 3)
W.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(7, 3)
R.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(8, 3)
V.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(9, 3)
End Sub
Я либо принципиально недоразумение что-то о Синтаксис VBA, или я пропустил ошибку braindead.
Возможно также, что я собираюсь сделать это All Wrong с точки зрения идиоматической автоматизации Excel, и в этом случае я также приветствую подталкивание к True Path - клиент, по-видимому, будет использовать это некоторое время, и я ненавижу они думали, что я плохой для того, чтобы развернуть дрянной код.
Вы должны явно объявлять типы переменных для ** каждой ** переменной. Ваша строка 'P, W, R, V As ConfigDataType' объявляет только' V', все остальные (P, W и R) по умолчанию используют 'Variant' вместо ConfigDataType – tigeravatar
Aha. Таким образом, правильный синтаксис больше похож на Sub SubParams (byRef P как ConfigDataType, W as ConfigDataType ... 'и т. Д. Выполняет ли начальный Dim работу, как я ожидаю, т.е. создает ProjCol, WBSCol, ValCol , и ResCol как переменные типа ConfigDataType? – Chet
Для вашего первого вопроса: Да, это правильный синтаксис. Для вашего второго вопроса: Нет, применяется одна и та же логика, и вам все равно нужно объявить каждый тип переменной явно – tigeravatar