Переполнение при вычислении константы в VBA
Это объявление вызывает переполнение в VBA:
Const OVERFLOWS As Long = 10 * 60 * 60
тогда как установка значения прямое:
Const COMPILES_OK As Long = 36000
Как вы убеждаете VBA обрабатывать литеральные целые числа как longs?
Спасибо
Ответы
Ответ 1
Добавьте суффикс long
&
как минимум к одному числу:
Const OVERFLOWS As Long = 10& * 60 * 60
Обратите внимание, что использование функции CLNG
для преобразования значений в long
не будет работать, поскольку VBA не позволяет назначить возвращаемое значение функции константе.
Ответ 2
http://support.microsoft.com/kb/191713 - хорошая сводка символов объявления типа, доступных в VBA/VB4-6.
Ответ 3
Для тех, кто находит символ и символ немного эзотерическим, альтернативой является использование функции CLNG, которая преобразует число в long
Const OVERFLOWS As Long = CLNG(10) * 60 * 60
вы могли бы сделать аналогичную вещь для единой константы
Const OVERFLOWS As Single = CSNG(10) * 60 * 60
Ответ 4
Символ типа также может быть добавлен к литералам: Const OVERFLOWS As Long = (10 & * 60 * 60)
(один из них является суффиксом на самом деле из-за того, как двигатель VBA оценивает выражение).