【发布时间】:2014-12-30 06:44:23
【问题描述】:
我看到很多人相信以下观点
VBA 将所有整数值转换为 Long 类型
事实上,连MSDN article 都说
“然而,在最近的版本中,VBA 将所有整数值转换为 Long 类型,即使它们被声明为 Integer 类型。”
这怎么可能?考虑这个简单的例子。
Sub Sample()
Dim I As Integer
I = 123456789
End Sub
如果VBA 将所有Integer 值转换为Long 类型即使它们被声明为Integer 类型,那么上面的内容绝不应该给您Overflow 错误! p>
我在这里缺少什么?还是我应该认为该声明不正确并认真注意链接开头所说的内容
【问题讨论】:
-
我相信这是关于整数数据类型的实现细节。 VBA 可能会在内部将其存储为 Long,但它显然会强制执行原始的 min-max 范围。
-
感谢@GSerg。您可能在这里有一个有效的观点。你能用可信的东西来支持这个说法吗?
-
不,这是猜测。实际上,我发现链接文章中的陈述相当模糊且无益。显然,在某些情况下,整数将作为长整数传递或处理,但在大多数情况下,这似乎不会发生。如果我声明两个整数变量
a和b,VarPtr(a) - VarPtr(b)给我2,很明显它总是2用于数组。 -
您链接到的页面似乎最初来自 Office2000 文档here。 Office95 是第一个完全 32 位的版本,所以如果作者指的是从 16 位到 32 位寄存器大小的变化,那是对“最近的版本......”的一个可怕的松散用法。其他措辞也将具有可怕的误导性 - VBA 类型在那种情况下不转换,它只是变得更有效率的操作。
-
"for anyone who may still be using these technologies"? Wow - I feel alienated.
标签: vba