Arrays 在VBA中声明数组变量
这三种样式声明数组变量的区别是什么:Arrays 在VBA中声明数组变量,arrays,excel,vba,Arrays,Excel,Vba,这三种样式声明数组变量的区别是什么: 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 如果我们用上面列出
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
是否会成为一个静态数组变量?变量可以是任何东西,正如我们可以读入的:
MyArr=Range("A1:C10").Value
Variant数据类型是所有未显式声明为其他类型(使用Dim、Private、Public或Static等语句)的变量的数据类型
变量数据类型没有类型声明字符
您可以使用变量数据类型代替任何数据类型
这基本上意味着Dim MyArr1作为变量
意味着MyArr1
也可以是变量数组
但最后两个表示您正在声明“anythings”的Array
,但只有第一个可以是anythings:)Dim MyArr1作为Variant
-MyArr1是Variant type的变量
变量类型可以保存任何数据类型或对象
下面两个是同一个。其动态数组的大小在设计时未知
Dim MyArr2() As Variant
Dim MyArr3()
两者之间的区别
Dim MyArr()
或
Dim MyArr()作为变体
(相同)和
Dim MyArr
或
Dim MyArr作为变型
(也相同)
…即Dim MyArr()
是一个数组,您不能给它赋值:MyArr=5
将失败。
而Dim MyArr
是完全未定义的,可以指定
- 值
MyArr=5
(将起作用)
- 或数组
MyArr=Range(“a1:c10”)。值
- 或范围
Set MyArr=range(“a1:c10”)
因此,如果您声明了一个变量,请尽可能具体。这意味着如果你想
MyArr = Range("a1:c10").Value
然后始终确保将其声明为arrayDim MyArr()as Variant
,这是此处最具体的选项。因此,除了数组之外,没有人可以在其中放入其他内容。你越具体,你的代码就保存得越多
此外,每个编码人员都看到在变量Dim MyVar()
中应该是一个数组,而在Dim MyVar
中,他们不知道所期望的是什么。您的意思是MyArr1不是数组吗?我可以用MyArr1=[NamedRange]填充它。Value
和NamedRange可以由任何矩形大小的单元格组成,比如A1:B10。MyArr1
是一个变量,具有变量数据类型它是否是数组变量?@PrzemyslawReminMyArr1
是variant
,这意味着它可以是任何东西,具体取决于你放在其中的内容。如果您输入一个字符串MyArr1=“ABC”
,那么它就是一个变量/string
。如果您放入一个数组MyArr1=array(“a”、“b”、“c”)
,那么它就是一个变量/数组。您不能仅仅通过它的声明来判断。@PrzemyslawRemin variant根据定义可以接受任何类型。如果您分配一个数组或一个函数的结果,该函数将数组返回给MyArr1,那么它将是一个数组。请您解释一下您的句子,但最后两个意思是您声明了“anythings”数组,但只有第一个可以是anythings:)
?这听起来很有哲理:-)@PrzemyslawRemin将Variant
视为“任何东西”,甚至是Variant
数组或任何其他数据类型。但最后两个是变量数组,所以它们不能是Integer
等,但它们可以是Integer
数组,它们可以是任何东西的数组,但不能是任何东西(它们都是数组)。您还可以执行MyArr4=array()
不带Dim
如果您没有使用选项显式
@reportgunner ehhm,我们不建议关闭选项显式
,我们实际上应该建议始终打开它。@Pᴇʜ我持相反的观点,但我决不建议将其关闭。类型化数组作为第四个“样式”:Dim MyArr2()作为double区别在于Dim MyArr()
是一个数组,不能为其赋值MyArr=5
将失败。但是Dim MyArr
是完全未定义的,可以指定一个值MyArr=5
将起作用,或者一个数组MyArr=Range(“a1:c10”)。值
或一个范围设置MyArr=Range(“a1:c10”)
。因此,如果您声明了一个变量,请尽可能具体。这意味着,如果要执行MyArr=Range(“a1:c10”).Value
,请始终确保将其声明为arrayDim MyArr()as Variant
,这是此处最具体的选项。因此,除了数组之外,没有人可以在其中放入其他内容。