Цитата |
---|
Максим Зеленский написал: Я думаю, компилятор всяко должен понять, какая конструкция использована - с условиями в начале и/или в конце, затем проверить их - либо в начале, либо в конце |
Началось с поста 3, где прозвучало утверждение, что For ... Next в отличие от Do .. Loop всегда будет делать минимум один проход. Я подумал, что скорее всего опечатка - но после первого примера был как бы...Отправлен проверять свое опровержение. После того, как
TheBestOfTheBest понял ошибку я уже пытался рассказать, что каждый цикл - разный. И нельзя однозначно сказать ни про Do ... Loop, ни про For ... Next, если не указать конкретную конструкцию.
VBE когда встречает DO начинает искать дальше условие сразу после Do(While,Untill). Если не находит - идет на следующую строку и выполняет конструкцию внутри цикла после чего ищет Loop(как замыкающее звено цикла) и после этого уже ищет опять условие, чтобы понять - завершать цикл или вернуться в петлю. Т.е. это процесс изнутри так происходит. В принципе, как и If ... Then и любая другая встроенная "конструкция".
А я тут ничем не мерялся и в мыслях этого не держал. Я уже пояснил причину своих сообщений Вам - Вы выкладываете утверждения, которые не всегда верны(по крайней мере в преподнесенном Вами изложении). Почитайте со стороны - не скажешь ведь, не зная, что имелось ввиду не отсутствие шага и наличие счетчика, а наличие переменной цикла(без которой For ... Next немыслим). И тем более не скажешь, что имелось ввиду наоборот Do ... Loop, а не For ... Next.
А ведь Вы на форуме грамотные решения выкладываете. Как следствие - люди будут читать Ваш подобный ответ и принимать за чистую монету.
Если Option Explicit закомментирована или вообще отсутствует(что, собственно говоря для проекта равнозначно) - VBE не станет ругаться на необъявленную переменную, а просто применит к переменной с необъявленным типом директиву DefVar(т.е. тип Variant). И это справедливо для всех версий офиса и для VB(.NET не берем). Попробуйте скомпилировать проект после изменений. Вероятно некоторый глюк имеется в файле или в офисе в целом.
Переменная. Но, мне кажется, что это не Ваши слова, а мои. Ваши слова звучали иначе:
Цитата |
---|
TheBestOfTheBest написал: Организация For Next всегда требует счетчика, с соответствующими заморочками (объявление переменных, присвоение значений TO и STEP) |
Разница налицо. И опять же - утверждение Ваше безаппеляционное и без каких-либо оговорок. И как следствие неверное в этом преподнесении. Если брать
For i = n To k - то-таки да. Но не в целом для For ... Next. О чем я опять же и написал.
В общем: я на этом откланиваюсь, для меня тема исчерпана(в части циклов, по крайней мере). Торжество эго оставлю Вам.