Ошибка компиляции VBA внутри оператора if

If IsArray(payCsv(pay_id)) = False Then
    'create tempArray
    lc = 0
    Debug.Print "create array"
End If

If IsArray(payCsv(pay_id)) = True Then
    Debug.Print " array exists, we should be able to get ubound"
    lc = UBound(payCsv(0)) - LBound(payCsv(0))
    l = l + 1
End If

Я использую приведенный выше код, чтобы определить, могу ли я использовать Ubound в моем 2D-массиве (т.е. если создано 2-е измерение, получить длину (ubound - lbound).

Однако я получаю ошибку компиляции, хотя условие 2 ложно, оно не распознает, что код не будет иметь значения.

Я тестирую один массив, и если я закомментирую "lc = UBound(payCsv(0)) - LBound(payCsv(0))", то получится "создать массив".

Если я оставлю эту строку там, я получу ошибку "Ошибка компиляции - ожидаемый массив"

Это ошибка в VBA?


person David    schedule 31.07.2017    source источник


Ответы (1)


Если вы хотите получить доступ к UBound второго измерения массива, формат выглядит следующим образом:

UBound(payCSV, 2)

страница MSDN этой функции может оказаться полезным.

Когда вы обращаетесь к payCSV(0), как в настоящее время, код предполагает, что вам нужен 1-й элемент в 1-м измерении массива payCSV.

Возможно, вы захотите попробовать это?

If IsArray(payCsv(pay_id)) = False Then
    'create tempArray
    lc = 0
    Debug.Print "create array"
Else
    Debug.Print " array exists, we should be able to get ubound"
    lc = UBound(payCsv, 2) - LBound(payCsv, 2)
    l = l + 1
End If
person takanuva15    schedule 31.07.2017
comment
OMG ... не могу поверить, что пропустил это ... я приму ответ, когда смогу. - person David; 31.07.2017