没有 括号 的,准确的说是没有类型的,有括号的才是数组类型的!!
有括号的不能用 array 赋值,这是一个问题
有括号的,在赋值时,需要注意很多细节
主要是注意.value 不能省略
比如下面的代码,如果没有 .value 则会提示"类型不匹配"
- Dim Arr()
- Arr = Sheets("Sheet1").Range("A1:B3").Value
复制代码这一点和在字典中添加项一样,
比如 a1里是张三,那么
d(range("A1"))=1
这样添加进去的是一个range对像,而不是一个值
这就会导致后期使用字典时会出现一系列的错误
再比如,你有一个工作表名字是 "张三",同样的,sheet1表a1里的值是 "张三"
那么 sheets(sheets("Sheet1").range("A1")).range("A1")=333
这样的代码,简化一下就是 sheets("张三").range("A1")=333
但实际上,代码是会提示错误的
因为这时候省略了 .value 他们取的是一个对像,所以会提示错误!!
问题2
在帮助里有这样一段:
如果使用了
Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。
例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。
不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。
你的代码
- arr1 = Range("a1:b5").Value
- ReDim Preserve arr1(1 To 10, 1 To 2)
是改变二维数组的第一维,所以这里不能通过
如果修改一下
- arr1 = Range("a1:b5").Value
- ReDim Preserve arr1(1 To 5, 1 To 5)
这样是可以的