从这三种样式中声明数组变量有何区别:
Dim MyArr1 As Variant
Dim MyArr2() As Variant
Dim MyArr3()
这三个动态变量都是吗?
我找不到比较这三个文件的文档链接。
更新。 当执行这两个代码时,我真的看不到任何区别:
代码1
Dim MyArr
MyArr = Range("a1:c10").Value
代码2
Dim MyArr() As Variant
MyArr = Range("a1:c10").Value
只要我们想为从数组中读取值的值赋值给数组,是否以上面列出的三种方式中的任何一种声明数组真的有关系吗?
MyArr=Range("A1:C10").Value
是这样,以便在执行上面的行时,声明变量就在用值填充它之前发生。就像我们有隐藏的代码行一样:
Dim MyArr(10,3) As Variant '10 rows, and 3 columns
当我们从某个范围读取数据时,MyArr
会变成静态数组变量吗?
答案 0 :(得分:3)
Dim MyArr1 As Variant
-MyArr1是具有变体类型的变量
变体类型可以容纳任何数据类型或对象
下面两个是一个相同的。在设计时不知道其动态数组的大小。
Dim MyArr2() As Variant
Dim MyArr3()
Sub ArayTest()
Dim MyArr1 As Variant
Dim MyArr2() As Variant
Dim MyArr3()
MyArr1 = 10
MyArr1 = #1/30/2019#
'--> You cannot directly assign value to array
'MyArr2 = 20
'MyArr3 = 30
'--> Use Redim to set the size of array
ReDim MyArr2(1)
MyArr2(0) = "abc"
MyArr2(1) = 1324
'--> variant can hold object
MyArr1 = Array(1, "s", #1/30/2019#)
End Sub
答案 1 :(得分:2)
Variant
可以是任何东西,正如我们在Variant data type中所读到的:
Variant数据类型是未明确声明为其他类型(使用诸如Dim,Private,Public或Static之类的语句)的所有变量的数据类型。
Variant数据类型没有类型声明字符。
您可以使用Variant数据类型代替任何数据类型
这基本上意味着Dim MyArr1 As Variant
意味着MyArr1
也可以是变体数组。
但是最后两个表示您正在声明Array
中的“任何内容”,但只有第一个可以是任何内容:)
答案 2 :(得分:2)
...之间的区别
Dim MyArr()
或Dim MyArr() As Variant
(相同)和Dim MyArr
或Dim MyArr As Variant
(也相同)…是Dim MyArr()
是绝对数组,您不能为其分配值:MyArr = 5
将失败。
Dim MyArr
完全未定义,可以分配…
MyArr = 5
(将起作用)MyArr = Range("a1:c10").Value
Set MyArr = Range("a1:c10")
因此,如果声明变量,请尽可能具体。这意味着如果您想做
MyArr = Range("a1:c10").Value
然后始终确保将其声明为数组Dim MyArr() As Variant
,这是此处最具体的选项。因此,除了数组之外,没有人可以放入其他东西。您越具体,则代码保存越多。
每个程序员都看到变量Dim MyVar()
中应该是一个数组,而在Dim MyVar
中他们不知道期望什么。