MyTetra Share
Делитесь знаниями!
Время создания: 31.07.2019 23:01
Раздел: !Закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1512830742som47r6b09/text.html на raw.githubusercontent.com

Функция GoTo

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

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования