powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как перехватить ошибку в процедуре?
16 сообщений из 16, страница 1 из 1
Как перехватить ошибку в процедуре?
    #34133906
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая процедура(перемещение файла):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function test1()
Dim fso As FileSystemObject
   On Error GoTo test1_Error

Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile "C:\Папка1\11-01.mdb", "C:\"

   On Error GoTo  0 
   Exit Function

test1_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure test1 of Class Module Enable_K"

End Function
возвращает ошибку 58 если в целевой папке уже есть файл с таким-же именем.
При запуске в VBA и возникновении ошибки, происходит правильный переход на метку test1_Error.
А вот в VB ошибка не обрабатывается: на строке fso.MoveFile... вываливается окно с сообщением и все, перехода в обработчик ошибки никак не происходит.
(для запуска процедуры нужна ссылка на Microsoft Scripting Runtime)
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34133978
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User-2,
скорее всего в VB в Меню:Tools\Options\General\Error Trapping выбрана опция Break on All Errors.

P.S. As FileSystemObject, но CreateObject() вместо New выглядит слегка нелогично.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134032
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скорее всего в VB в Меню:Tools\Options\General\Error Trapping выбрана опция Break on All Errors точно, выбрана! А какую надо?
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134044
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CreateObject() вместо New выглядит слегка нелогичнотекст скопировал из хелпа к "Объектная модель FileSystemObject", а что нелогичного?
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134050
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Цитата из хелпа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Первый способ создания объекта FileSystemObject
Объявим переменную, как объект:
Dim fso As FileSystemObject
Set fso = New Scripting.FileSystemObject 

Второй способ создания объекта FileSystemObject
Используем метод CreateObject для создания объекта FileSystemObject:
Dim fso As FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
т.е. в процедуре выбран второй способ...
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134066
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с опциями разобрался, второй вопрос - в силе.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134079
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ли ссылка на Microsoft Scripting Runtime в Reference ??
или убери из кода
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134148
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ссылка есть. чего убрать-то? убрать ссылку, объявлять dim fso as object и использовать CreateObject, так?
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134194
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для первого способа ссылка нужна, для второго - нет.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134239
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User-2,
MS - большая контора, компилятор пишут одни люди, IDE/отладчик - другие, Object Browser - третьи, Help и Samples - ещё более другие...

К нашим баранам. Замечание моё - стилистическое, потому что технически разница минимальна, хотя и есть. Обычно используют либо раннее связывание везде (подключают библиотеку типов и получают все причитающиеся плюшки от списка методов по нажатию точки до более быстрого исполняемого кода), либо позднее связывание везде (As Object, CreateObject(), работа через IDispatch (прозрачно для VB/VBA программиста)). Использование строгой типизации и CreateObject совместно намеренно - редкий и специальный случай, когда надо создать экземпляр объекта на другом сервере или в своём потоке, например.

Есть ещё момент. Библиотека Microsoft Scripting Runtime содержит объекты, предназначенные в основном для VBS, в котором нет строгой типизации и раннего связывания. Но это не значит, что исключительно для VBS. Есть соблазн написать документацию сразу для VBS/VB/VBA, и лукавость этого подхода может проявляться (намеренно либо по недосмотру). Вот такое IMHO.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134450
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо понял. еще вопрос не в тему, но про эту же процедуру:
теперь, когда переход в обработчик ошибок происходит, я в нем обрабатываю ошибку 58, а именно удаляю файл из целевой папки. Потом мне надо вернуться на строку, где возникла ошибка(fso.MoveFile ...). Я перед ней поставил метку и делаю из обработчика переход (Go To me1) на эту метку. Другого способа нет?
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134528
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User-2,
Код: plaintext
Resume
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134532
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть. Не доводи дело до ошибки. Вначале проверь, есть ли файл, и удали его. FileSystemObject имеет все необходимые для этого средства.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134553
User-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Resume <номер метки> так уж отличается от Go To?
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34134727
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User-2,
во-первых, без номера метки. Во-вторых, Resume применяется только в обработчиках ошибок.
...
Рейтинг: 0 / 0
Как перехватить ошибку в процедуре?
    #34135031
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim objFSO As New FileSystemObject

If objFSO.FileExists("C:\File.txt") Then
objFSO.DeleteFile "C:\File.txt", True
End If

If objFSO.FileExists("C:\Temp\File.txt") Then
objFSO.MoveFile "C:\Temp\File.txt", "C:\"
End If
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как перехватить ошибку в процедуре?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]