【问题标题】:What's difference between working with arrays declared as Dim Array() as Variant and Dim Array as Variant in VBA?在 VBA 中使用声明为 Dim Array() as Variant 和 Dim Array 作为 Variant 的数组有什么区别?
【发布时间】:2015-11-02 04:15:37
【问题描述】:

VBA 中的两个声明 Dim Array_1() as VariantDim Array_2 as Variant 有什么区别?

如果我随后使用上述声明创建数组:

Array_1 = Range("A1:A10")
Array_2 = Range("A1:A10")

在本地窗口中,我看到 Array_1 和 Array_2 的不同描述。我似乎 Array_2 包含未定义类型的值。我可以ReDimArray_2吗?

【问题讨论】:

  • 简单地说: Dim Array() as variant 正在创建一个包含 Variant 类型的值的数组 Dim Array as variant 只是创建一个可以包含变量值的变量,该变量值也可能是一个数组(但实际上几乎可以是任何东西)。
  • 另外,Array 是 VBA 中的一个现有函数,所以实际上dim Array as variant 不起作用。试试Dim arrayTest as variant
  • 除非你扩展你的问题,否则答案只会是,“一个是数组,另一个不是。”
  • Here 是区别之一。如果您想将任何类型的“数组”传递给函数,则传递单个 Variant 而不是 Variants 的数组。在后一种情况下,您必须传递Variant 对象的数组,而在前一种情况下,您可以传递任何类型的数组。另外,数组是按引用传递的,而变量是按值传递的。

标签: vba excel


【解决方案1】:
Dim Arraytest() as Variant

声明一个名为 Arraytest 的变量,它被设置为一个数组 上面可以像下面这样使用

ReDim Arraytest(9)

ReDim Arraytest(1 To 10)

设置一个包含 10 个值的数组 - 第一种情况是 Arraytest(0) 到 Arraytest(9),第二种情况是 Arraytest(1) 到 Arraytest(10)。


相对于:


Dim Arraytest as Variant

声明一个名为 Arraytest 的变量,它被设置为单个变量 - 注意第二个代码不能用作数组

注意:数组不能作为变量名——上面使用了Arraytest

【讨论】:

  • @R3uK 0,1,2,3,4,5,6,7,8,9 是 10 个值吗?为什么你把 redim Array(10) 改为 9?因为“0”算作1?
  • 是的,0 到 9 之间确实有 10 个值,就像 1 到 10 之间有 10 个一样。我更正了它,因为您的下一行对此非常清楚。
  • 不能用作数组...但Dim Array as Variant : ReDim Array(1 To 10) 工作正常。
  • 变体可以是任何东西——甚至是数组! Dim arrayTest As Variant : arrayTest = Array(1, 2, 3) 这很好用。
  • 你真的尝试过这段代码吗? Array 是一个 VBA 函数,而 Dim Array() as Variant 带或不带括号都会导致编译错误..
猜你喜欢
  • 2010-10-06
  • 2021-08-08
  • 2023-02-14
  • 2011-04-21
  • 2017-03-05
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多