vba - 为什么这个子过程会返回运行时溢出错误?
问题描述
试图了解数据类型并正在测试这个子过程。数据类型似乎适用于变量,但除非我将 B 变量更改为 Single 或 Double,否则它不起作用。这对我来说没有意义。当分配给它的值落在 Long 数据类型的范围内时,为什么 Long 不起作用?是否有一些关于数据类型我不知道的规则?
Sub DataTypeChallenge ()
Dim A As Double
Dim B As Long
A = 5
B = A * 53976
A = B * 1000000
MsgBox A
End Sub
解决方案
我认为问题发生在可能类似于
A = B * 53976
问题是 VBA 在第一步中计算表达式 B * 53976 as long 这会导致溢出。只有在第二步中,VBA 才会将其转换为加倍。你可以这样解决
A = CDbl(B) * 53976
或者你改变你在帖子中写的数据类型
另一个例子
Sub TestInt()
Dim myDbl As Double
Dim a As Integer, b As Integer
a = 32000
b = 1000
myDbl = a + b
End Sub
这也会产生运行时错误 6,因为数据类型整数被限制为 32565(左右),但代码首先将 a + b 求和并将结果放入整数,然后将其转换为双精度数。
SO上的另一个例子
推荐阅读
- python-3.x - 在 MacOS 上设置 Python 版本
- azure - 检索多个秘密值密钥保管库
- c - 即使以二进制模式写入文件也会损坏
- sqlite - 类'列表
' 没有实例 getter 'values'。接收方:“_GrowableList”的实例(长度:11)尝试调用:值 - julia - 如何使用古罗比?
- powershell - 将 2 个 CSV 文件与 compare-object 进行比较以获得过时的软件
- javascript - 将 ReactJS、NextJS 配置文件移动到“config”目录而不是根文件夹中
- haskell - Haskell ' 符号有什么作用?
- python - Vectorized method for mapping a list from one Dataframe row to another Dataframe row
- date - 如何在谷歌表格中将文本转换为日期格式?