Гу
Гуис

как задать условие на ошибку в синтаксисе VBA

всем привет
подскажите как прописать условие в VBA что если эта функция выдает ошибку ( т. е. не находит "_") Replace(bfile, Mid(bfile, InStr(InStr(bfile, "_") + 1, bfile, "_")), "") то мне выводится любое сообшение ну а если нет то задается переменной fname = Replace(bfile, Mid(bfile, InStr(InStr(bfile, "_") + 1, bfile, "_")), "")

Skif .
Skif .

"On error goto 1" пишешб перед своим кодом, а после него
Exit Sub
1:
MsgBox "Ошибка"

Татьяна Пастушенко
Татьяна Пастушенко

Структура процедуры с обработчиком событий примерно выглядит так:

Sub Test()
'Объявление переменных
On Error GoTo Err_sub 'Если ошибка, то перейти к метке Err_sub (метка может называться как угодно

'<..Текс тела процедуры или функции.. >

Exit Sub 'Выход из процедуры, что-бы ошибка не отработалась в нормальной ситуации

Err_sub: 'Метка перехода на обработчик ошибок. Обязательно в конце строки двоеточие
'<..Обработка ошибок.. >
'Действия, которые нужно сделать при ошибке.
Resume Next 'Возвращение в на следующую, после ошибки, строку кода. Если эту строку пропустить. То процедура просто завершится

End Sub

Также есть следующие условия для создания условия на ошибку. Эти команды можно помещать где угодно в теле кода, когда команда выполнится то с этого места будет обрабатываться ошибка согласно правилу:
Если написать On Error goto Метка - то при ошибке компилятор будет переходить на метку. Этот пример описан выше.
Если написать On Error Resume Next - при встрече ошибки компилятор просто пропускает её и выполняет следующую строку кода.
Если написать On Error GoTo 0 - то это переводит обработчик событий в штатный режим (по умполчанию) . Эта строка в основном применяется, если ранее в коде была отключена обработка ошибок, и необходимо её включить снова.

Также можно анализировать саму ошибку. Так при возникновении ошибки создается объект Err со множеством свойств, в котором хранится вся информация об ошибке.
Так например Err.Number - хранит в себе код ошибки, а Err.Description - описание ошибки и т. д. Дальше и глубже нужно копаться в справочниках.
Как пример:
On Error GoTo Err_sub

....

Exit Sub

Err_sub:
msgbox "Ошибка номер: " & cstr(err.number) & vbCrLf & _
Err.description, vbCritical, "Внимание"
Resume Next

Похожие вопросы
в чем ошибка? код на VBA
Паскаль выдает ошибка синтаксиса. Где???
Код VBA работает с ошибкой, почему?
mysql выдает ошибку синтаксиса???
Ошибка VBA "For without Next"
vba выдаёт ошибку for without next, в чём причина?
VBA Задать ожидание открытия окна
построить условие в VBA. А конкретнее как описать это кодом.
Только начал изучать vba. в чем моя ошибка в программе?
Помогите! Ошибка синтаксиса в коде