在VBA中设置长变量

3

有一个我无法找到答案的简单问题。在进行算术运算时,似乎自然类型是将值视为16位整数。

我正在尝试将60 * 60 * 8 * 5的结果保存为长整型,但我在保存数字为Long之前就收到了Overflow错误提示:

Dim secondsInAWorkWeek As Long
secondsInAWorkWeek = 60 * 60 * 8 * 5

一个long类型可以存储2的31次方 = 2,147,483,647之内的任何数值。

如何进行安全的乘法运算以将其转换为long类型呢?


2个回答

2

在将通用(默认)类型的字面量强制转换为特定类型时,有某些约定:http://msdn.microsoft.com/en-us/library/dzy06xhf.aspx

这导致了以下代码:

Dim secondsInAWorkWeek As Long

Let secondsInAWorkWeek = 60& * 60& * 8& * 5&

或者:

Const DAYS_IN_WEEK = 5&
Const HOURS_IN_DAY = 8&
Const MINUTES_IN_HOUR = 60&
Const SECONDS_IN_MINUTE = 60&

Dim secondsInAWorkWeek As Long

Let secondsInAWorkWeek = _
     DAYS_IN_WEEK _
   * HOURS_IN_DAY _
   * MINUTES_IN_HOUR _
   * SECONDS_IN_MINUTE

还有很多要写的,但是类型安全,几乎不需要更多的解释/注释,而且当他们投票支持10小时工作日时,它将很容易修改。 :-)


2

根据Stack Overflow上的一篇文章,当乘法操作中涉及整数和长整型时,需要给Excel一个运行的起点,否则它会将乘法中的每个值默认为整数。

只需使用CLng进行强制类型转换即可:

Dim secondsInAWorkWeek As Long
secondsInAWorkWeek = CLng(1) * 60 * 60 * 8 * 5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接