VBA中命名范围赋值数组后元素调用格式疑问求助
为什么VBA中Range赋值到数组后元素索引从1开始?
嘿,这个问题其实是VBA和Excel对象模型交互时的典型细节,我来给你掰扯明白~
首先你得清楚:当你直接把Range("namedrange1")赋值给Variant变量时,VBA并没有把这个范围当成单一值处理,而是自动将其转换为一个二维数组——哪怕你的命名范围是单列、单行甚至单个单元格,返回的都是二维结构。
而核心关键点就在这:Excel返回的这个数组是1-based(从1开始索引)的,这是Excel对象模型的传统设定,和VBA里我们自己声明的数组(默认是0-based,从0开始)完全不一样。
回到你的代码:
Dim accountStructure As Variant ReDim accountStructure(2) accountStructure(0) = Range("namedrange1") accountStructure(1) = Range("namedrange2") accountStructure(2) = Range("namedrange3")
accountStructure是你声明的0基数组(ReDim accountStructure(2)默认包含索引0、1、2三个元素)- 但每个元素(比如
accountStructure(0))存储的是Excel返回的1基二维数组:- 如果
namedrange1是单列范围(比如A1:A5),二维数组的第一维对应行号、第二维对应列号,所以第一个元素是accountStructure(0)(1,1),第二个是accountStructure(0)(2,1) - 如果是单行范围(比如A1:C1),第一个元素是
accountStructure(0)(1,1),第二个是accountStructure(0)(1,2)
- 如果
如果想让内层数组变成0基的,你可以手动用循环把1基数组的元素复制到新的0基数组里,但一般来说,直接遵循Excel的1基规则使用会更省心~
内容的提问来源于stack exchange,提问作者Tanpo
相关产品推荐
相关产品推荐

