在VBA中设置长变量

时间:2014-10-22 14:19:01

标签: vba excel-vba long-integer multiplication excel

我无法在任何地方找到的简单问题。当我进行算术运算时,似乎自然类型是将值视为16Bit Integers。

我尝试将60 * 60 * 8 * 5的结果保存到较长时间内,但我发现Overflow错误,甚至有机会将该数字保存为Long

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

Long应该乐意存储最多2个 31 = 2,147,483,647

如何安全地执行乘法转换为长

2 个答案:

答案 0 :(得分:2)

好的,根据Overflow when multiplying Integers and assigning to Long,您需要为Excel提供一个运行开始,否则它会将乘法中的每个值都默认为整数。

刚开始使用CLng进行长时间投射,然后将完成剩下的工作:

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

答案 1 :(得分: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小时工作日时很容易改变。 : - )