Тема: VBA отказывается считать

пишу в дебагере следующее
? 190003 - (((52 * 60)*60)+46 * 60)
получаю ошибку
run-time error '6':
Overflow
В чем причина????

Re: VBA отказывается считать

(ответ должен быть 43)

Re: VBA отказывается считать

раз ответ знаешь - зачем пишешь???
думаю у него ограничение в максимальном числе... допустим 32000...

Re: VBA отказывается считать

да в том та и дело что ограничений у него не должно быть...

Re: VBA отказывается считать

190003 - (((CLng(52) * 60)*60)+CLng(46) * 60) = 43

Re: VBA отказывается считать

Любой язак программирования начинается с определения типов переменных. Однако 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.
Очень рекомендую Вам использовать в своих программах обязательное определение переменных.

Re: VBA отказывается считать

> Николай
Прекрасное объяснение!
Понимаю, что не добавляю в тему ничего нового по существу вопроса, но хочу отметить, что иногда очень важно вернуться к основам, к принципам.
Дело в том, что все мы заточены на конкретный ответ. Ответ в виде кода. А иногда важно, см. выше...