Это образец цикла в VBA в Excel.

Sub Tests ()

Dim a As Integer
Dim b As Integer

b = 5

For a = 1 to b 
    MsgBox a
Next a  

End Sub 

Когда я удаляю a в Next a, скрипт по-прежнему работает нормально. Так почему же нам нужен Next a, а не Next?

1
hieppm 1 Май 2014 в 17:59

3 ответа

Лучший ответ

См. Раздел технической реализации документации о For ... Next Statement (Visual Basic) от Microsoft: http://msdn.microsoft.com/en-us/library/5z06z1kb.aspx

Если вы вкладываете циклы, компилятор сигнализирует об ошибке, если он встречает оператор Next внешнего уровня вложенности перед оператором Next внутреннего уровня. Однако компилятор может обнаружить эту ошибку перекрытия, только если вы укажете счетчик в каждом операторе Next.

Поэтому лучше быть более конкретным и указать, какой счетчик вы увеличиваете / уменьшаете, потому что он помогает компилятору обнаруживать ошибки во вложенных циклах. Но это, конечно, не обязательно во всех циклах - это необязательно.

Microsoft рекомендует его для удобочитаемости в разделе Counter Argument на той же странице:

Вы можете дополнительно указать переменную счетчика в операторе Next. Этот синтаксис улучшает читаемость вашей программы, особенно если у вас есть вложенные циклы For. Вы должны указать переменную, которая появляется в соответствующем операторе For.

3
Stepan1010 1 Май 2014 в 14:33

Это необходимо? Нет. Если вы его используете. Лично я скажу да. В больших кодах у вас может быть несколько вложенных циклов. Может быть, сотни строк между строк

For a = 1 to b 

И линия

Next

Поэтому добавление a после next действительно поможет определить, где цикл начинается и заканчивается.

1
Pedrumj 1 Май 2014 в 14:01

Проще говоря, старые версии BASIC требовали использования, например GW-BASIC. Более новые версии BASIC, такие как QuickBASIC, сохранили синтаксис для поддержки старого кода для обратной совместимости. Сегодня, с Visual-версиями BASIC, такими как VBScript, VBA и Visual BASIC, кажется странным, что вам придется указывать переменную цикла, поскольку они могут сделать вывод, где заканчивается цикл.

Я думаю, со временем вы обнаружите, что вы откажетесь от синтаксиса Next <variable>. Его использование не добавляет ценности и немного усложняет обслуживание, потому что если вы измените переменную в операторе For, вам придется изменить его в операторе Next.

Тем не менее, из-за природы интерпретатора BASIC, бывают случаи, когда вам нужно указать, какой оператор Next применим. За все годы моего многолетнего программирования на BASIC я чаще использовал эту технику в первые дни и редко в наше время из-за новых возможностей языка.

0
AMissico 1 Май 2014 в 14:45