Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 10 ]
- mikkelle
- полковник
- Неактивен
- Зарегистрирован: 21.01.2010
- Сообщений: 227
- Поблагодарили: 12
Тема: Обработка ошибок (что-то неверно)
В документе осуществляется проход по закладкам (ранее автоматически установленным) и с ними должно проводиться некие действия. Обработчик ошибок срабатывает только один раз, а при следующей ошибке срабатывать отказывается. Word выдает "Запрашиваемый номер семейства отсутствует"
Вот код. Подскажите, где ошибка?
On Error GoTo ErrPerehod
With ActiveDocument.Bookmarks
Dim BMItem As String
For n = 1 To 20
For i = 1 To 9
BMItem = "_Capp" & n & "_" & i
.Item(BMItem).Range.Select
GoTo PEREHOD
ErrPerehod:
Next i
PEREHOD:
Next n
End With
С уважением
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Обработка ошибок (что-то неверно)
Существует специальная форма оператора On Error:
Использование данного оператора заставляет VBA удалять любую ловушку ошибки, которая была предварительно установлена с помощью On Error. После удаления ловушки, если произойдет ошибка, то VBA будет выдавать стандартное сообщение об ошибках. Кроме того оператор On Error Goto 0 очищает объект Err, поэтому, если необходимо, нужно сохранять свойства этого объекта...
(данный текст не мой, а из документа, найденного в инете. Ищется по фразе "Обработка ошибок в VBA" или что-то подобное...
- mikkelle
- полковник
- Неактивен
- Зарегистрирован: 21.01.2010
- Сообщений: 227
- Поблагодарили: 12
Re: Обработка ошибок (что-то неверно)
Не понял смысла ответа!!!
Про указанный оператор я знаю, но при чем тут он? Я не собираюсь очищать объект Err. Я не могу понять, почему в моем коде он срабатывает только один раз?
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Обработка ошибок (что-то неверно)
все просто.. В вашем коде переход осуществляется сразу на метку, минуя цикл..
То есть обработчик ошибок должен быть внутри With
- mikkelle
- полковник
- Неактивен
- Зарегистрирован: 21.01.2010
- Сообщений: 227
- Поблагодарили: 12
Re: Обработка ошибок (что-то неверно)
Если бы было так все просто, то должен был бы работать следующий код:
Dim BMItem As String
For n = 1 To 20
For i = 1 To 9
On Error GoTo ErrPerehod
ActiveDocument.Bookmarks.Item(BMItem).Range.Select
GoTo PEREHOD
ErrProhod:
Err.Clear
Next i
PEREHOD:
Next n
а он работает абсолютно так же
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Обработка ошибок (что-то неверно)
Сейчас, к сожалению, нет времени полностью проанализировать код. Но я бы постарался сделать без использования меток и переходов к ним... Хотя, в готовых решениях по сосданию списка сокращений у меня есть функция обработки ошибок и все работает нормально.. Можете там посмотреть реализацию..
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
- За сообщение: 1
Re: Обработка ошибок (что-то неверно)
Код "On Error GoTo <метка>" активирует обработчик ошибок пользователя, а не просто переходит по метке. Пока выполняется обработка ошибки пользователем, другие ошибки не обрабатываются (поэтому срабатывает один раз). Для завершения обработки ошибки служит команда Resume, также обработчик останавливают Exit Sub, Exit Function, Exit Property. Правильной будет конструкция:
On Error GoTo ErrorHandler
. . .
Exit Sub
ErrorHandler:
. . .
Resume Next
Вы не собираетесь ничего обрабатывать, а просто отслеживаете ошибку. Вам подойдет конструкция:
On Error Resume Next
...
If Err.Number <> 0 Then GoTo <метка>
Отредактировано Вождь (21.10.2010 01:27:44)
Макросы под заказ и готовый пакет - mtdmacro.ru
- mikkelle
- полковник
- Неактивен
- Зарегистрирован: 21.01.2010
- Сообщений: 227
- Поблагодарили: 12
Re: Обработка ошибок (что-то неверно)
Вождь, при использовании конструкции Resume Next выполнение кода переходит на строку после строки с ошибкой. Потому, в моем случае приходится делать два перехода. Получилось вот так:
Dim BMItem As String
For n = 1 To 20
For i = 1 To 9
On Error GoTo ErrPerehod
ActiveDocument.Bookmarks.Item(BMItem).Range.Select
GoTo PEREHOD
ErrPerehod:
Resume ErrPerehod2
ErrPerehod2:
Next i
PEREHOD:
Next n
В любом случае спасибо за подсказку
- Вождь
- Модератор
- Неактивен
- Зарегистрирован: 07.01.2010
- Сообщений: 745
- Поблагодарили: 181
- За сообщение: 1
Re: Обработка ошибок (что-то неверно)
А у меня получилось так:
With ActiveDocument.Bookmarks
Dim BMItem As String
For N = 1 To 20
For i = 1 To 9
BMItem = "_Capp" & N & "_" & i
On Error Resume Next
.Item(BMItem).Range.Select
If Err.Number = 0 Then Exit For
Next i
Next N
End With
Что получилось сказать не могу но делает тоже.
Отредактировано Вождь (21.10.2010 08:43:21)
Макросы под заказ и готовый пакет - mtdmacro.ru
- mikkelle
- полковник
- Неактивен
- Зарегистрирован: 21.01.2010
- Сообщений: 227
- Поблагодарили: 12
Re: Обработка ошибок (что-то неверно)
Да, точно, правильно! Совсем забыл, что Err.Number = 0 означает, что нет ошибки!
Отлично. Большое спасибо!
Сообщений [ 10 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Обработка ошибок (что-то неверно)
Если ваша деятельность связана со значительными объемами текстов, то неплохо бы досконально изучить свою версию редактора (чаще всего этим редактором является Microsoft Word). Наш сайт о Microsoft Office Word даст ответ про: восстановленный файл doc.
Сделать это можно, прочитав специальную литературу и пообщавшись, к примеру, с другими пользователями. Наш сайт о Microsoft Office Word даст ответ про: excel идет подготовка к установке.
Многое вы почерпнете и на специализированном форуме сайта Ворд Эксперт.
Ответы на вопросы, как быстро и безболезненно отформатировать запущенный текст, разобраться с колонтитулами, написать в автоматическом режиме макрос и многое другое вы найдете на страничке нашего форума. Наш сайт о Microsoft Office Word даст ответ про: как простаить страницы в ворде 2007.
Стили, таблицы, шрифты, заголовки. Готовые шаблоны и настройки программы для оптимальной работы. В разделе «Настройки и Форматирование» можно обсудить все существующие версии Ворда. Наш сайт о Microsoft Office Word даст ответ про: офис 2010 повернуть строницу.
Наверняка, есть функции, которые прошли мимо вас, какие-то операции можно оптимизировать. Например, предложено много способов поставить ударение в тексте, использовать функцию «Найти и Заменить» и многое другое. На портале о Microsoft Office Word вы узнаете про: прпала функция дуплекса word 2010.
В разделе «Автоматизация» главное внимание уделено шаблонам, макросам и полям. Обсуждают там проблемы печати документов, гиперссылки, вставки и многое другое. На портале о Microsoft Office Word вы узнаете про: вычисляемые таблицы в word.
В Ворде поддается автоматизации практически все.
На форуме есть раздел, где вы можете посмотреть готовые решения или поделиться своими, есть подфорум, для заказов. На портале о Microsoft Office Word вы узнаете про: как изменить шрифт формулы.
В общем, весьма полезно будет и новичкам, и довольно продвинутым юзерам. Каждый найдет для себя небезынтересную информацию. На портале о Microsoft Office Word вы узнаете про: word переход по ссылке назад.