Тема: VBA отказывается считать
пишу в дебагере следующее
? 190003 - (((52 * 60)*60)+46 * 60)
получаю ошибку
run-time error '6':
Overflow
В чем причина????
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → VBA отказывается считать
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
пишу в дебагере следующее
? 190003 - (((52 * 60)*60)+46 * 60)
получаю ошибку
run-time error '6':
Overflow
В чем причина????
раз ответ знаешь - зачем пишешь???
думаю у него ограничение в максимальном числе... допустим 32000...
да в том та и дело что ограничений у него не должно быть...
190003 - (((CLng(52) * 60)*60)+CLng(46) * 60) = 43
Любой язак программирования начинается с определения типов переменных. Однако BASIC изначально разрабатывался как инструмент для людей далеких от программирования, чтоб по каждой мелочи им не бегать за программистами. Поэтому в нем было создан инструмент автоматического приведения типов переменных, он не всегда работает так, как мы хотим. В предложенной Вами записи:
190003 — (((52 * 60)*60)+46 * 60)
В процессе вычисления BASIC использует переменные типа INT: Это целое число от -32768 до 32767. Это приводит к ошибке переполнения в данном случае.
Выход из этой ситуации состоит в явном определении типов перемееных:
DIM a as long
Dim b as double.....
Вообще в настройках VBA надо ставить флажок в опции: "Требовать обязательного определения переменных", тогда Вы будете обязаны все переменные определять явно, и это правильно т.к.
1. уменьшает двусмысленность при написании кода,
2. приучает к дисциплине,
3. позволяет избежать ошибок, при наборе особенно длинных имен: легко ведь можно ошибиться и написать l, вместо 1.
Например:
Coll=3
print "Coll"=Col1
- такую опечатку сложно заметить, долго будешь соображть почему печатается Coll=0
Если же будет включено обязатетельное определение переменных, то такие ошибки будут выявленны компилятором.
При включении опции обязательного обозначения переменных в начале каждого програмного модуля будет автоматичеки появляться оператор:
Option Explicit.
Очень рекомендую Вам использовать в своих программах обязательное определение переменных.
> Николай
Прекрасное объяснение!
Понимаю, что не добавляю в тему ничего нового по существу вопроса, но хочу отметить, что иногда очень важно вернуться к основам, к принципам.
Дело в том, что все мы заточены на конкретный ответ. Ответ в виде кода. А иногда важно, см. выше...
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → VBA отказывается считать
Форум работает на PunBB, при поддержке Informer Technologies, Inc