VBA:以编程方式获取Long限制

时间:2011-11-02 09:10:38

标签: vba

VBA中是否有办法以编程方式获取数值类型(例如Long)的限制(最小值,最大值)?

类似于C ++中的numeric_limits<long>::min()

4 个答案:

答案 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

无论你的船漂浮着什么。