Я знаю, что многие люди задавали вопросы об этой ошибке, но, судя по ответам на них, я должен все делать правильно.
Я создал класс Variable
для хранения нескольких фрагментов информации о переменной. У меня есть еще один класс с именем Equipment
, в котором хранится массив этих переменных. Вот соответствующий код в Equipment
:
Public name As String
Private variables() As Variable
Public Sub setVariables(vars() As Variable)
variables = vars
End Sub
У меня также есть модуль, который создает экземпляры Equipment
. Вот весь код для этого:
Public Sub fillEquipment()
'figure out how many units of equipment there are
numUnits = 0
atRow = 1
Do Until Range("A" & atRow).value = ""
numUnits = numUnits + 1
atRow = atRow + 1
Loop
'create array for equipment units
Dim units() As Equipment
ReDim units(0 To numUnits)
'figure out how many variables there are
numVars = 0
For Each col In Range("A1:ZZ1")
If col.value <> "" Then
numVars = numVars + 1
End If
Next col
'create an array of equipment one row at a time
atRow = 1
Do Until Range("A" & atRow).value = ""
'create and name equipment
units(atRow) = New Equipment
units(atRow).name = Range("A" & atRow).value
'create an array of vars
Dim variables() As Variable
ReDim variables(0 To numVars)
For atCol = 1 To numVars
variables(atCol) = New Variable
variables(atCol).name = Cells(1, atCol).value
variables(atCol).value = Cells(atRow, atCol).value
Next atCol
'add variables to equipment
units(atRow).setVariables (variables)
atRow = atRow + 1
Loop
'print for testing
For atRow = 1 To numUnits
Cells(atRow, 1).value = Equipment(atRow).name
For atCol = 1 To numCols
Cells(atRow, atCol + 1).value = Equipment(atRow).getVariables(atCol)
Next atCol
Next atRow
End Sub
Вот моя проблема: когда я запускаю программу, она выдает ошибку компилятора «Несоответствие типов: ожидается массив или пользовательский тип» в слове variables
в units(atRow).setVariables (variables)
.
Я не понимаю, что я делаю неправильно. variables
определяется как массив типа объекта Variable
, который является именно тем, что запрашивает setVariables
.
Благодарю вас! Я очень ценю помощь!!
Private variables() As Variable
должно бытьPrivate variables() As Variant
- и такое же изменение необходимо сделать во всем коде. Не существует такого понятия, как типVariable
, если только вы сами его не определите. - person braX   schedule 07.08.2017Public name As String
Public value As Long
- person Ari Levisohn   schedule 07.08.2017Variables
. Вам нужно будет перебрать массив переменных и назначать единицы по одной. ...если я правильно понимаю. ...Что вообще такоеUnits
? Вы также должны добавитьOption Explicit
в самый верх вашего кода, чтобы убедиться, что вы объявили все переменные. - person BruceWayne   schedule 07.08.2017units
представляет собой массивEquipment
. Я добавил замедление для него выше. - person Ari Levisohn   schedule 07.08.2017units(atRow).setVariables (variables)
,units(atRow).setVariables variables
. Если это не сработает, попробуйтеPublic Sub setVariables(vars As Variant)
- person cxw   schedule 07.08.2017DoSomething (foo)
не то же самое, чтоDoSomething foo
. Отбросьте круглые скобки, они заставляют параметр оцениваться как значение и передаватьByVal
, что недопустимо для массива. - person Mathieu Guindon   schedule 07.08.2017