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