我有一个为工作编写的大型复杂的VBA脚本。我正在整理它,并注意到我可以以比之前更加动态的方式来定义我的数组。
最初,我是像这样定义我的字符串数组的:
Dim header_arr(6) As String
Dim header_arr_2(4) As String
header_arr(0) = "esn"
header_arr(1) = "vin"
header_arr(2) = "last gps update time"
header_arr(3) = "status"
header_arr(4) = "account name"
header_arr(5) = "vehicle #"
header_arr_2(0) = "esn"
header_arr_2(1) = "vin"
header_arr_2(2) = "last gps update time"
header_arr_2(3) = "status"
header_arr_2(4) = "vehicle #"
然后我在尝试如何分配一个数组时,设法将其简化为以下内容:
Dim header_arr
header_arr = Array("esn", "vin", "last gps update time", "status", "account name", "vehicle #")
' Function call with this first Array
header_arr = Array("esn", "vin", "last gps update time", "status", "vehicle #")
' Function call with this second Array
我的问题是:
我知道对于这个简单的脚本部分,CPU成本并不相关,但对于更大的数组,如果有任何差异,写入数组的最低CPU成本方法是什么?
我没有找到有关定义数组的不同方法之间性能差异的太多信息。
header_arr(6) As String
是一个字符串数组。Array()
返回的结果是一个Variant
,包含了一个Variant
数组。显然后者有更多的开销。 - GSergDim header_arr As Variant
和Dim header_arr
是完全相同的。你不能将一个 Variant/Array 直接赋值给一个严格类型的变量,必须逐行进行赋值。但是,如果函数参数声明为ByRef ... As Variant
,则可以将严格类型的数组传递给函数而不复制数组,并且该函数也能够接受 Variant/Array。使用ByVal ... As Variant
将导致在调用时复制数组。 - GSergArray(...)
在行内定义一个含有 3 百万项的数组,那么这是怎么回事呢?" - Mathieu GuindonRecordset
可能是一个更好的选择。或者这些值可能在工作表上,在这种情况下,您可以使用一行代码将它们快速转换为2D变体数组。取决于您的需求=) - Mathieu GuindonDim header_arr() As Variant
和Dim header_arr()
都可以让你得到一个变量数组,但是第一个选项更清晰地表明了你的意图。这对于未来阅读你代码的任何人(包括你自己)都是有益的。 - FreeMan