VBA: получить длинные лимиты программно - PullRequest
3 голосов
/ 02 ноября 2011

Есть ли способ в VBA программно получить ограничения (минимальное значение, максимальное значение) числового типа (например, Long)?

Что-то вроде numeric_limits<long>::min() в C ++.

Ответы [ 4 ]

8 голосов
/ 02 ноября 2011

Нет, но они в любом случае имеют фиксированный размер, поэтому вы можете вывести их напрямую.

Вот некоторая информация об их размерах: http://msdn.microsoft.com/en-us/library/aa164754.aspx

Из статьи:

Типы данных Integer и Long могут содержать как положительные, так и отрицательные значения.Разница между ними заключается в их размере: целочисленные переменные могут содержать значения от -32 768 до 32 767, а длинные переменные могут варьироваться от -2 147 483 648 до 2 147 483 647.Традиционно, программисты VBA использовали целые числа для хранения небольших чисел, потому что им требовалось меньше памяти.Однако в последних версиях VBA преобразует все целочисленные значения в тип Long, даже если они объявлены как тип Integer.Следовательно, использование целочисленных переменных больше не дает преимущества в производительности;на самом деле, переменные Long могут быть немного быстрее, потому что VBA не нужно преобразовывать их.

1 голос
/ 02 ноября 2011

Я не думаю, что есть функция для этого.Я бы создал библиотеку значений const для каждого типа чисел, тогда вы могли бы сослаться на это.

0 голосов
/ 11 июля 2017

Для платформы программирования с 32-битным артикулом: «Dim Item1 As Long», переменная имеет длину 32-бит. Это означает, что каждая переменная с длинным затемнением является 32-битной. Максимальное значение, которое оно может содержать (положительное или отрицательное), составляет немногим более 2 млрд.

    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
0 голосов
/ 24 февраля 2015
Sub highlong()
Dim x As Long
On Error GoTo Prt
Do While True
   x = x + 1
Loop
Prt:
   MsgBox (x)
End Sub

Все, что плывет на твоей лодке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...