Вы измерили массив вариантов в 3 измерениях.
Две строки, которые дают вам ошибки, потому что вы пытаетесь присвоить значение элементу массива без указания трех индексов.
Вы ДОЛЖНЫ ВСЕГДА использовать в массиве одинаковое количество индексов, поскольку массив имеет измерения. Без исключений, никогда. В VBA нет способа узнать, к какому элементу вы пытаетесь обратиться в противном случае.
Массив в 3 измерениях концептуально является кубом. Но то, что вы сделали, объявив первое и второе измерения как нулевого размера, фактически стало сложным для работы вектором.
В вашем массиве есть только rng
элементов, и к этим элементам можно получить доступ только предоставляя все три индекса. Например, первый элемент - hArr(0, 0, 0)
. Второй элемент - hArr(0, 0, 1)
. Третий элемент - hArr(0, 0, 2)
. Et c.
В вашей схеме объявления первого и второго измерений как нулевого размера, вы фактически потратили впустую первые два измерения. У вас есть массив 1d, для которого теперь требуется три индекса для ссылки на каждый элемент.
Обновление
Для структуры массива с зубчатыми краями учитывайте следующее.
Dim t
Redim t(1 to 3)
t(1) = "Unique Value 1"
t(2) = "Unique Value 2"
t(3) = Array(1, 2, 3, "Some other value")
Обратите внимание, что здесь я назначил массив 1d для t(3)
, но это мог быть массив 2d или массив любого ранга.
Чтобы получить значения, вы делаете это следующим образом ...
Debug.Print t(1)
Debug.Print t(2)
Debug.Print t(3)(0)
Debug.Print t(3)(1)
Debug.Print t(3)(2)
Debug.Print t(3)(3)
Каждый элемент в массиве вариантов может потенциально содержать отдельный массив. И каждый элемент в этих отдельных массивах может содержать новые массивы. И так далее. Столь сложные структуры данных возможны и допустимы при таком подходе.