在VBA

时间:2019-01-30 09:25:03

标签: 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

只要我们想为从数组中读取值的值赋值给数组,是否以上面列出的三种方式中的任何一种声明数组真的有关系吗?

MyArr=Range("A1:C10").Value

是这样,以便在执行上面的行时,声明变量就在用值填充它之前发生。就像我们有隐藏的代码行一样:

Dim MyArr(10,3) As Variant '10 rows, and 3 columns

当我们从某个范围读取数据时,MyArr会变成静态数组变量吗?

3 个答案:

答案 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

enter image description here

答案 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中他们不知道期望什么。