Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обработать ошибку

248
15 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Вот я пускаю обработку предлогов в трех типах заголовков.
А если у меня нет одного из предложенных заголовков, то макрос останавливается и пишет
Цитата:
"Запрашиваемый номер семейства не существует у принцыпе"

(от гад :D )
Как заставить это игнорировать - ну нет и не надо. Мол, обработай те, заголовки, что есть.

267
15 декабря 2006 года
Cutty Sark
1.2K / / 17.10.2002
Ну-ка, запость макрос и укажи, в какой строчке останавливается.
275
15 декабря 2006 года
pashulka
985 / / 19.09.2004
Считаю, что нужно не допускать возникновение подобных ошибок, например :

Код:
Option Compare Text

Private Sub Test()
    For Each vItem In Array("Заголовок 1", "Заголовок 3", "Хрень")
        If ExistStyle(vItem) = True Then
           With ThisDocument.Styles(vItem) 'ActiveDocument.Styles()
                '...
           End With
        Else
           MsgBox "Обломись", , ""
        End If
    Next
End Sub

Private Function ExistStyle(vStyleName) As Boolean
    Dim objStyle As Style
    For Each objStyle In ThisDocument.Styles 'ActiveDocument.Styles
        If objStyle = vStyleName Then
           ExistStyle = True
           Exit Function
        End If
    Next
    ExistStyle = False
End Function
248
15 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Пощу (итак, пишет ошибку, когда не находит заголовок стилем ТЕЗИС - он есть не во всех документах:
Код:
For Each vItem In Array("Заголовок 3", "Заголовок 4", "ТЕЗИС")
    'With ThisDocument.Styles(vItem) 'ActiveDocument.Styles()
    '     '...
    'End With
Selection.HomeKey Unit:=wdStory '2
    Selection.Find.ClearFormatting
    For i = 1 To 1000
[COLOR="Navy"]стопорится на этой строке[/COLOR]    With ThisDocument.Styles(vItem) 'ActiveDocument.Styles()
    With Selection.Find
        .Text = " ^$^$ "
        .Replacement.Text = "": .Forward = True: .Wrap = wdFindStop: .Format = True: .MatchCase = False:
        .MatchWholeWord = False: .MatchWildcards = False: .MatchSoundsLike = False: .MatchAllWordForms = False
    End With
    End With
    Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Entt
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.TypeText Text:=Chr$(160)
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Next i
Entt:
Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting '1 буква
    For i = 1 To 1000
    With ThisDocument.Styles(vItem) 'ActiveDocument.Styles()
    With Selection.Find
        .Text = " ^$ ": .Replacement.Text = "": .Forward = True: .Wrap = wdFindStop: .Format = True
        .MatchCase = False: .MatchWholeWord = False: .MatchWildcards = False: .MatchSoundsLike = False: .MatchAllWordForms = False
    End With
    End With
    Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Ent
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.TypeText Text:=Chr$(160)
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Next i
Ent:
Next
End Sub

Только прошу не ругать за конструкцию for-next вместо While-Wend (как было рекомендовано). Почему-то с While'ом часто зацикливалась и приходилось останаливать Break'ом).
267
15 декабря 2006 года
Cutty Sark
1.2K / / 17.10.2002
Если так, то делай как говорит pashulka постом выше.
Что касается For-Next-While-Wend - можно разобраться, если есть желание.
248
15 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Цитата:
сли так, то делай как говорит pashulka постом выше.


А там два варианта. Надо использовать какой-то один или это для разных сред?

248
15 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Цитата:
Что касается For-Next-While-Wend - можно разобраться, если есть желание.


Желание есть. Я попробую восстановить код, когда все бесконечно начинало циклиться и покажу.
А что, разве нет какой-то простенькой инструкции типа OnError - Goto ... ?
Вот в верстальных скриптах есть команда Try. Т.е. прога просто пытается вполнить действие. Если не идет, то не ругается, а молча идет дальше. - Дешево и сердито.

405
18 декабря 2006 года
Dmitrii
554 / / 16.12.2004
Цитата: Dmitry2064
А что, разве нет какой-то простенькой инструкции типа OnError - Goto ... ?


Есть. Пример:

 
Код:
Sub MySub()
On Error GoTo ErrCase
'основной код
Exit Sub
ErrCase: 'это метка
'код обработки ошибочной ситуации
End Sub


Цитата: Dmitry2064
Вот в верстальных скриптах есть команда Try. Т.е. прога просто пытается вполнить действие. Если не идет, то не ругается, а молча идет дальше.


Аналог на VB/VBA/VBS: [color=blue]On Error Resume Next[/color]

Цитата: Dmitry2064
Дешево и сердито.


Однако, это далеко не лучший вариант с точки зрения качества работы программы. Впрочем, надо признать, иногда совершенно необходимый.

267
18 декабря 2006 года
Cutty Sark
1.2K / / 17.10.2002
Цитата: Dmitry2064
А там два варианта. Надо использовать какой-то один или это для разных сред?



Там не два варианта. Там вспомогательная функция ExistStyle (нижняя часть кода) и макет основного кода, в котором она используется (верхняя часть)

248
18 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Спасибо за пояснения к On Error. Вот оно как все оказалось просто. Начинаем юзать...
А, кстати, работа макроса с On Error будет идти наверное быстрее, чем если писать вспомогат. функцию по проверке существования перечисляемых стилей?

P.S. Про "вспомогательность" уяснил.
267
18 декабря 2006 года
Cutty Sark
1.2K / / 17.10.2002
Цитата: Dmitry2064

А, кстати, работа макроса с On Error будет идти наверное быстрее, чем если писать вспомогат. функцию по проверке существования перечисляемых стилей?



Сложно сказать... В любом случае, это совершенно незначительное время в общих 36 секундах, которые работает твой макрос. Не всё ли равно одна сотая секунды или две сотых, если остальное работает полминуты?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог