|
|||||||
Функция GoTo
Время создания: 31.07.2019 23:01
Раздел: Разные закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1512830742som47r6b09/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Часто бывает нужно остановить выполнение макроса или вернуться и сделать операцию повторно, или наоборот проскочить некоторый кусок кода. Во вторых двух случаях можно обойтись обычными операторами циклов и условным оператором If, но гораздо эффективнее и с точки зрения быстродействия, и с точки зрения читабельности и красоты кода будет использовать функцию GoTo. Она позволяет перейти в определенное место кода, задаваемое либо именем, либо номером строки. Эта функция в основном используется для обработки ошибок. Например, нам нужно заменить "а" на "о" и вывести сообщение о произведенной замене. Допустим, мы делаем это обычной командой Replace
Sub repl() On Error GoTo next_code Cells.Replace What:="а", Replacement:="о" Msgbox("Замены выполнены, мой генерал") next_code: ........ End
Таким образом, если букв "а" не найдено, Replace выдаст ошибку, после чего выполнение кода продолжится с метки "ends", то есть с 4 строки кода, после которой - лишь завершение макроса. Или же, допустим, мы просили пользователя указать какой-либо параметр выполнения кода (рабочий файл, значение переменной и т.д.), но он совершил ошибку и макрос не может выполняться с указанными параметрами (например, указал файл, в котором нет листа с нужным именем). В таком случае было бы неплохо вернуться, чтобы пользователь мог указать верные параметры. Например (про ручное открытие файла в процессе выполнения макроса читайте ниже): Sub s() file_open: MsgBox ("Выберите нужный файл") bfName = Application.GetOpenFilename() Set mmm = Workbooks.Open(bfName) On Error GoTo file_open mmm.Sheets("data").Activate ..... End Sub
Если после выполнения какого-то условия нужно не просто перейти на какую-то строчку, а совсем завершить выполнение макроса, то лучше использовать конструкцию Exit Sub, например: If a>0 then Exit Sub Else ........ End If |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|