VBA中是否有办法以编程方式获取数值类型(例如Long
)的限制(最小值,最大值)?
类似于C ++中的numeric_limits<long>::min()
。
答案 0 :(得分:8)
不,但无论如何它们都是固定大小的,所以你可以直接推断它们。
以下是有关其尺寸的一些信息:http://msdn.microsoft.com/en-us/library/aa164754.aspx
来自文章:
Integer和Long数据类型都可以保存正值或负值。它们之间的区别在于它们的大小:整数变量可以保持-32,768和32,767之间的值,而Long变量的范围可以从-2,147,483,648到2,147,483,647。传统上,VBA程序员使用整数来保存较小的数字,因为它们需要较少的内存。但是,在最近的版本中,VBA将所有整数值转换为Long类型,即使它们被声明为Integer类型。因此,使用Integer变量不再具有性能优势;实际上,Long变量可能会稍快一些,因为VBA不必转换它们。
答案 1 :(得分:1)
我认为没有这方面的功能。我会为每个数字类型创建一个const值库,然后你可以引用它。
答案 2 :(得分:0)
对于具有32位articuture的编程平台:&#34; Dim Item1 As Long&#34;,变量长度为32位。这意味着每个Long dimmed变量都是32位。它可以包含的最大值(正面或负面)略高于20亿。
Sub sumall()
Dim firstRow As long
firstRow = 5
Dim lastRow Aslong
lastRow = 12
Dim aRow As long
Dim sumall As Variant
Dim sumResult As Variant
sumResult = 0
Dim previousValue As Variant
previousValue = -1
For aRow = firstRow To lastRow
If Cells(aRow, 2).Value <> previousValue Then
sumResult = Cells(aRow, 2).Value
previousValue = Cells(aRow, 2)
End If
Next aRow
sumall = sumResult
End Sub
tasc的另一个选择是使用scriptingDictionary仅获取唯一值:
Sub sumall()
Dim objDictionary As Object
Dim firstRow As Long
firstRow = 5
Dim lastRow As Long
lastRow = 12
Dim aRow As Variant
Dim varKey As Variant
Dim sumResult As Variant
Set objDictionary = CreateObject("Scripting.Dictionary")
For aRow = firstRow To lastRow
If objDictionary.exists(Cells(aRow, 2).Value) = False Then
objDictionary.Add Cells(aRow, 2).Value, True
End If
Next aRow
sumResult = 0
For Each varKey In objDictionary.keys
sumResult = varKey + sumResult
Next varKey
End Sub
答案 3 :(得分:-1)
Sub highlong()
Dim x As Long
On Error GoTo Prt
Do While True
x = x + 1
Loop
Prt:
MsgBox (x)
End Sub
无论你的船漂浮着什么。