|
|
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
Вот такая процедура(перемещение файла): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. При запуске в VBA и возникновении ошибки, происходит правильный переход на метку test1_Error. А вот в VB ошибка не обрабатывается: на строке fso.MoveFile... вываливается окно с сообщением и все, перехода в обработчик ошибки никак не происходит. (для запуска процедуры нужна ссылка на Microsoft Scripting Runtime) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:08 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
User-2, скорее всего в VB в Меню:Tools\Options\General\Error Trapping выбрана опция Break on All Errors. P.S. As FileSystemObject, но CreateObject() вместо New выглядит слегка нелогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:24 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
скорее всего в VB в Меню:Tools\Options\General\Error Trapping выбрана опция Break on All Errors точно, выбрана! А какую надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:33 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
CreateObject() вместо New выглядит слегка нелогичнотекст скопировал из хелпа к "Объектная модель FileSystemObject", а что нелогичного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:35 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
Цитата из хелпа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:37 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
с опциями разобрался, второй вопрос - в силе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:39 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
есть ли ссылка на Microsoft Scripting Runtime в Reference ?? или убери из кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:41 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
ссылка есть. чего убрать-то? убрать ссылку, объявлять dim fso as object и использовать CreateObject, так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:54 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
Для первого способа ссылка нужна, для второго - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:04 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
User-2, MS - большая контора, компилятор пишут одни люди, IDE/отладчик - другие, Object Browser - третьи, Help и Samples - ещё более другие... К нашим баранам. Замечание моё - стилистическое, потому что технически разница минимальна, хотя и есть. Обычно используют либо раннее связывание везде (подключают библиотеку типов и получают все причитающиеся плюшки от списка методов по нажатию точки до более быстрого исполняемого кода), либо позднее связывание везде (As Object, CreateObject(), работа через IDispatch (прозрачно для VB/VBA программиста)). Использование строгой типизации и CreateObject совместно намеренно - редкий и специальный случай, когда надо создать экземпляр объекта на другом сервере или в своём потоке, например. Есть ещё момент. Библиотека Microsoft Scripting Runtime содержит объекты, предназначенные в основном для VBS, в котором нет строгой типизации и раннего связывания. Но это не значит, что исключительно для VBS. Есть соблазн написать документацию сразу для VBS/VB/VBA, и лукавость этого подхода может проявляться (намеренно либо по недосмотру). Вот такое IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:11 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
спасибо понял. еще вопрос не в тему, но про эту же процедуру: теперь, когда переход в обработчик ошибок происходит, я в нем обрабатываю ошибку 58, а именно удаляю файл из целевой папки. Потом мне надо вернуться на строку, где возникла ошибка(fso.MoveFile ...). Я перед ней поставил метку и делаю из обработчика переход (Go To me1) на эту метку. Другого способа нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:58 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
User-2, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:14 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
Есть. Не доводи дело до ошибки. Вначале проверь, есть ли файл, и удали его. FileSystemObject имеет все необходимые для этого средства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:15 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
Resume <номер метки> так уж отличается от Go To? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:23 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
User-2, во-первых, без номера метки. Во-вторых, Resume применяется только в обработчиках ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 19:36 |
|
||
|
Как перехватить ошибку в процедуре?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 23:52 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34134528&tid=2164962]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 460ms |

| 0 / 0 |
