Дополнительные круглые скобки вокруг points
приводят к тому, что аргумент оценивается как выражение и, следовательно, передается ByVal
.
Акт оценки массива может точно изменить то, какданные упакованы в Variant
, который их содержит (например, см. VBA: удаление дубликатов завершается неудачно, когда массив столбцов передается с использованием переменной в качестве примера), и если вызываемая процедура не очень мягко относится к типаммассивов, которые он может принять (что и должно быть), тогда это вызовет ошибку.
В вашем случае я действительно удивлен, что передача оцененного (points)
даже работает, потому что в документации упоминается, что двумерный массивожидается Single
s, а Array(Array(...), Array(...), ...)
- зубчатый массив, в отличие от 2D-массива.Может показаться, что AddPolyline
написано также для работы с неровными массивами, но распознает их только тогда, когда в варианте, содержащем массив, есть определенный набор флагов, который, по-видимому, производит оценка (например, может быть, что присутствие или отсутствие VT_BYREF
отключает сравнение своего флага, поэтому он не может распознать переданный массив как поддерживаемый.
Я бы назвал это ошибкой в AddPolyline
, и я бы явно определил и заполнил2D массив Single
чтобы избежать этого:
Dim points(1 To 4, 1 To 2) As Single
points(1, 1) = 10.5: points(1, 2) = 10.5
points(2, 1) = 20.4: points(2, 2) = 20.4
points(3, 1) = 5.1: points(3, 2) = 30.3
points(4, 1) = 10.5: points(4, 2) = 10.5