“Dim myarray()as String”VS“Dim myarray()as Variant”

时间:2015-07-16 19:15:05

标签: excel vba excel-vba declaration variant

在假设将分配不必要的大量内存的情况下,我总是害怕将事物声明为变体。

最近我致力于提高电子表格的效果但却产生了相反的印象(请参阅下面的编辑):与Dim myarray() as Variant相比,Dim myarray() as String提升了效果

这两个声明的主要区别和后果是什么?

无法在此处找到明确的指导:https://msdn.microsoft.com/en-us/library/aa711948.aspx

编辑:受控性能测试

我进行了受控性能测试(取dim myarray() as Variant版本,制作副本并将两个变量更改为Dim myarray() as String

正如你在下面看到我错了,性能差异并不显着。

Dim myarray() as Variant VERSION

Start 4:05:47 PM
FXLoaded 4:05:47 PM 00:00 TDLoaded 4:06:38 PM 00:51 LisofPCTD 4:06:57 PM 00:19 YDLoaded 4:07:47 PM 00:50 LisofPCYD 4:08:14 PM 00:27 PrintCoBTD 4:08:46 PM 00:32 PrintCoBYD 4:09:18 PM 00:32 Total 03:31 03:31

Dim myarray() as String VERSION

Start 4:25:53 PM
FXLoaded 4:25:53 PM 00:00 TDLoaded 4:26:53 PM 01:00 LisofPCTD 4:27:10 PM 00:17 YDLoaded 4:28:07 PM 00:57 LisofPCYD 4:28:32 PM 00:25 PrintCoBTD 4:29:03 PM 00:31 PrintCoBYD 4:29:34 PM 00:31 Total 03:41 03:41

1 个答案:

答案 0 :(得分:2)

将数组声明为数组将保存的数据类型是有意义的,这为将来查看代码的任何人提供了清晰度。通常更好的是给你的代码可读性,牺牲一点点内存(尽管这可能取决于场景)。例如,如果您的数组只包含字符串,则将该数组声明为字符串。然而,如果你的数组将包含整数和字符串的混合,那么应该使用一个变体。

本质上,将数组声明为数组类型,该数据类型对于数组将要保留的内容是合乎逻辑的。

如果要从工作表填充数组,则必须将变量声明为变量。尝试填充已声明为字符串的数组(包含工作表中的值)将导致“类型不匹配”调试消息,无论范围的值是否都是字符串。

以下是与VBA中的数组相关的一些MSDN documentation

无论如何,这就是我声明数组所遵循的内容。为任何未来的开发人员提供更易于阅读的代码> 轻微内存保存。