Вы написали "Это говорит вариант / двойник, затем, когда я вхожу в массив в локальном окне, двойное значение указывается как vals0 (1) (1) = 18.2738746824382" . Итак, очевидно, что vals0(1)
не является двойным, это массив двойных.
К сожалению, вы ничего не говорите нам о PIAdvCalcVal
. vals0
объявляется как (одномерный) массив с 30 (?) Элементами типа Variant
. Это означает, что у вас есть 30 вариантов. Каждый вариант может содержать что угодно , двойное число, строку, объект или также Array чего угодно. Последнее, кажется, имеет место, PIAdvCalcVal
вернул массив двойных значений (даже если массив содержит, может быть, только одно значение).
Итак, обо всем по порядку: поставьте заявление Debug.Print looop0, VarType(vals0(looop0))
после вашего Run
заявления. Посмотрите на https://docs.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/vartype-function, чтобы получить представление о числах, представляющих vartype. Если vartype что-то> 8192, у вас есть массив чего-то, и это объясняет ошибку несоответствие типов - вы не можете сравнить массив с числом.
Если PIAdvCalcVal
всегда возвращает массив, решением может быть просто написать If Vals0(looop0)(1) <> 0
(обратите внимание, что Vals0(looop0, 1)
не будет работать, поскольку Vals0
не является двумерным массивом).
Более надежное решение может быть
Var x
If IsArray(Vals0(looop0)) Then
x = Vals0(looop0)(1)
Else
x = Vals0(looop0)
End If
If x <> 0 Then
...
Наконец, вы должны проверить, насколько велик возвращаемый массив (отметьте LBound
и UBound
). Что бы вы сделали, если бы оно содержало более одного значения?