Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在VBA中声明数组变量_Arrays_Excel_Vba - Fatal编程技术网

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
然后始终确保将其声明为array
Dim MyArr()as Variant
,这是此处最具体的选项。因此,除了数组之外,没有人可以在其中放入其他内容。你越具体,你的代码就保存得越多


此外,每个编码人员都看到在变量
Dim MyVar()
中应该是一个数组,而在
Dim MyVar
中,他们不知道所期望的是什么。

您的意思是MyArr1不是数组吗?我可以用
MyArr1=[NamedRange]填充它。Value
和NamedRange可以由任何矩形大小的单元格组成,比如A1:B10。
MyArr1
是一个变量,具有变量数据类型它是否是数组变量?@PrzemyslawRemin
MyArr1
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
,请始终确保将其声明为array
Dim MyArr()as Variant
,这是此处最具体的选项。因此,除了数组之外,没有人可以在其中放入其他内容。