【问题标题】:Excel vba variant array reusable, must be erased?Excel vba变体数组可重用,必须擦除?
【发布时间】:2023-03-13 23:43:01
【问题描述】:

我有一个技术问题:

我的问题: 我创建了一个

Dim arrTemp as Variant 
Dim wbSource as workbook
Dim wbTarget as workbook

因为我需要将多个工作表中的多个范围(非固定范围)导出到另一个工作簿。我的代码如下:

' Worksheet 1
arrTemp = wbSource(1).Range("A1:B2").value
wbTarget(1).Range("A1:B2").value = arrTemp
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp
' Worksheet 2
arrTemp = wbSource(2).Range("A1:B2").value
wbTarget(2).Range("A1:B2").value = arrTemp
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp
' Worksheet 3
arrTemp = wbSource(3).Range("A1:B2").value
wbTarget(3).Range("A1:B2").value = arrTemp
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp

(工作表一开始可以是空的,这就是为什么空的 arr 处理程序) (工作表可以包含 int/str/double/...,并且大小没有那么大,无法定义特定的 arr 类型)

我的问题是: 每次都擦除数组有意义吗?还是会被自动覆盖?

我在定义具有新范围的数组之前和之后进行了测试以检查数组的属性(Lbound 和 UBound)。我可以看到它会自动 Redim 数组。是不是意味着我只需要在程序结束时清除它?

或者在两者之间清除它是一个好习惯?

最后但同样重要的是,您在我的代码中发现任何问题吗?执行此任务的更好方法?

非常感谢!

编辑: 记住 此任务的代码不正确,无需转入数组!

【问题讨论】:

  • 老实说,我完全看不到使用变量而不是每次都将一个范围的值分配给另一个范围的任何好处。但是,不需要擦除数组。
  • 有趣。我多年来一直在全职编程 VBA,甚至不知道有这个 Erase 命令。
  • @Rory。我从“Power Programming 2013”​​中以这种方式提取了数组传输方法来复制范围(有点矫枉过正,我没有处理数十万行)。你的建议是简单地从一个范围发送到另一个范围吗?
  • @iDevlop,好吧,我肯定做错了什么:D
  • 在这种情况下是的。如果您需要处理介于两者之间的数据,则数组将有意义,但不适用于此。另外,使用Value2 应该比Value 稍快。

标签: arrays excel vba


【解决方案1】:

简而言之(感谢 rory!):

无需每次都擦除数组。 仅在离开程序之前。

【讨论】:

  • 甚至在离开之前。它会自动销毁。但是,在退出过程之前将set object variables 转换为Nothing 似乎是一种好习惯。
  • @iDevlop 哦..我试图遵循良好实践代码...我喜欢研究高级代码,通常我看不到人们清除任何东西...直到我弄清楚我会坚持良好的做法,但我猜垃圾收集器几乎可以做所有事情......感谢您的见解,非常感谢!
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2017-12-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多