连续定义二维数组时出现Error 2015的原因及解决方法
Error 2015 错误原因
你遇到的Error 2015本质是#VALUE!错误,触发原因是VBA中使用[{...}]语法定义数组时,要求数组必须是矩形结构——所有行的元素数量必须完全一致。
看你的代码:
iIoTAryOnX的每一行都有5个元素,符合矩形要求,所以运行正常;iIoTAryOnY的各行元素数量分别是2、5、3、3、2,行与行的长度不一致,违反了[{...}]的语法规则,因此触发错误。
解决方法
根据你的实际需求,有两种可行方案:
方案1:创建锯齿状数组(数组嵌套数组)
如果不需要矩形结构,而是需要每行长度可变的数组,可以用Array()函数嵌套定义:
Dim iIoTAryOnY As Variant iIoTAryOnY = Array( _ Array(11, 13), _ Array(1, 6, 9, 10, 12), _ Array(2, 8, 14), _ Array(3, 5, 7), _ Array(4, 15) _ )
- 注意:这种方式创建的是锯齿状数组,访问元素时需要用双层索引,比如取第二行第三个元素:
iIoTAryOnY(1)(2)(默认是0-based索引,若代码开头有Option Base 1则是1-based)。
方案2:填充为矩形数组
如果必须使用矩形二维数组,需要给元素数量少的行填充占位值(比如Empty或0),让所有行的元素数一致:
Dim iIoTAryOnY As Variant iIoTAryOnY = [{11,13,Empty,Empty,Empty; 1,6,9,10,12; 2,8,14,Empty,Empty; 3,5,7,Empty,Empty;4,15,Empty,Empty,Empty}]
- 这样定义后,数组是标准的二维矩形结构,访问方式和
iIoTAryOnX一致,比如iIoTAryOnY(1,1)(1-based索引)。
内容的提问来源于stack exchange,提问作者AITD
相关产品推荐
相关产品推荐

