Поведение переполнения VBA - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть поведение vba, которое я не понимаю. Я запускаю VBA в макросе Excel 2016 года.

Sub alpha()

Dim a As Integer, b As Long
a = 750
b = 50 * a

Stop

End Sub

Запуск этого подпрограммы приводит к ошибке переполнения. Почему?

Переменная a является целым числом и поэтому не может содержать число 750*50, поскольку оно слишком велико. Но переменная b измеряется как long - поэтому она должна содержать это число.

Странно - если я изменяю тип переменной a на Long, то код запускается.

1 Ответ

0 голосов
/ 26 апреля 2018

Максимальное значение для Integer в VBA составляет 32 767.

Вы переполняете это значение 50 * a.Не имеет значения, что вы хотите присвоить это Long, поскольку концептуально умножение происходит до назначения, и к тому времени ущерб уже был нанесен.

Используйте Long вместо aили напишите

b = 50& * a

для форсирования типа.Либо хороши до 2 147 483 647

...