【问题标题】:VBA Macros: Using variables with type modifierVBA 宏:使用带有类型修饰符的变量
【发布时间】:2015-03-26 19:40:46
【问题描述】:

我已经用简写形式声明了一个整数变量 testInt,如下所示

Dim testInt% 

使用

有什么区别
somevalue = testInt * testInt

对比

somevalue = testInt% * testInt%

简而言之,在引用变量的每一点都使用类型说明符有什么好处吗?

【问题讨论】:

标签: excel vba


【解决方案1】:

快速时间测试表明它们是线球 - 这在直觉上是有道理的

使用Long 而不是Integer 会更有效。看到这个MSFT Link

我将使用更准确的 API 计时器重复此操作

Sub B()
Dim testInt%
Dim somevalue%
Dim lcnt As Long
Dim dbStart As Double
dbStart = Timer()
For lcnt = 1 To 100000000
somevalue = testInt * testInt
Next
MsgBox "Time was " & Timer() - dbStart
End Sub

Sub A()
Dim testInt%
Dim somevalue%
Dim lcnt As Long
Dim dbStart As Double
dbStart = Timer()
For lcnt = 1 To 100000000
somevalue = testInt% * testInt%
Next
MsgBox "Time for type-specified was " & Timer() - dbStart
End Sub

【讨论】:

  • 为什么 Long 效率更高?我会假设 a) 两种数据类型都有硬件支持 b) VBA 会利用这种支持 c) 整数是 15(非符号)位,长整数是 31,因此与整数有关的工作更少。这些假设中是否有任何错误,或者我错过了什么?
  • 顺便说一句,我不知道line ball这个短语是什么意思。这可能是我的无知(我可以根据答案的其余部分进行推断),但如果它是某种形式的区域俚语,可能值得更新您的答案。此外,我只是澄清一下,我并不反对任何地方方言(实际上相反),但其他读者可能也不理解这个词:)
  • 啊。你的意思是他们没有定论? :) 此外,结果中的所有内容都会转换为 long 并转换回 int 吗?
  • 我以为线球意味着没有区别。无论如何,感谢您通过链接澄清 - 我想您在我阅读帖子后不久添加了这一点,但在我发表评论之前不久(根据编辑时间判断)。
  • @DarkXphenomenon 我猜“线球”是一个以澳大利亚为中心的术语,是的,时间是无法区分的,这与已经声明的变量类型一致。 :)
猜你喜欢
  • 1970-01-01
  • 2019-03-31
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多