Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2015, 20:08   #1
Omu
Новичок
Джуниор
 
Регистрация: 07.12.2015
Сообщений: 1
По умолчанию Как отловить ошибку "5941: Запрашиваемый номер семейства не существует"?

Предыстория:
Нужно было написать макрос, который сравнивает выбранные столбцы в разных таблицах, для этого он считывает в выбранных таблицах первые ячейки столбцов как их названия для последующего выбора. При этом я случайно создал таблицу в таблице, дважды выполнив макрос, аналогичный первому в примере. После чего также случайно выбрал полученную таблицу в качестве источника. В результате получил ошибку "5941: Запрашиваемый номер семейства не существует". Справка по выбранной ошибке выбрасывает на стартовую страницу справочной системы, то есть не проливает никакого света на причину и методы устранения ошибки. Вообще, справка в Word и VBA в частности такая убогая, что даже после часа копания в ней я не нашел ответов на поставленные вопросы.
Специально для наглядности выложил отчет браузера объектной модели, примерный вид полученной таблицы и фрагмент программы (не оригинальный) вызывающий ошибку. На картинке явно видно, что в первом столбце второй таблицы три ячейки, но объектов ячеек там нет. Первая таблица приведена для наглядности, в ней видны три ячейки в первом столбце
Вопрос делится на два варианта:
1. Какие свойства таблицы отвечают за ее нестандартность, в частности отсутствие в ее столбцах ячеек? Чтобы выявить глючную таблицу сразу. Сравнивая полученные таблицы я таких свойств не нашел.
2. Как отловить ошибку если она уже случилась? Команды IsError, IsMissing, IsEmpty, IsNull не работают, так как выполнение прерывается до них. Какие еще есть команды для проверки ошибок я не нашел.

Сразу скажу, можно прочитать ячейки из первой строки таблицы, примерно так
MsgBox ActiveWindow.Document.Tables(2).Row s(1).Cells(i).Range.Text
но меня интересуют данные в столбцах, так что ошибка все равно вылезет позже.
Так же, если в первую ячейку добавить хотя бы строку, ошибка исчезает, но надо исключить принципиальную возможность ошибки, учитывая что она уже найдена.
Изображения
Тип файла: jpg запрашиваемый номер семейства не существует.jpg (65.4 Кб, 134 просмотров)

Последний раз редактировалось Omu; 07.12.2015 в 20:12.
Omu вне форума Ответить с цитированием
Старый 10.12.2015, 05:00   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Omu Посмотреть сообщение
...Какие свойства таблицы отвечают за ее нестандартность...
Таких свойств нет. Можно проверить наличие объединенных ячеек, отловив ошибку при обращении к Table.Columns(1) или Table.Rows(1). Нестандартность же, то есть любые изменения структуры таблицы, отловить ну очень проблематично. Простейший пример в таблице ниже, где нет объединенных ячеек, а есть просто сдвиг или изменение размеров отдельных строк:

Про таблицы Word надо понимать, что столбцов там как бы нет. В том смысле, что точно известны только номер строки ячейки и порядковый номер ячейки в этой строке. Последний никак не номер столбца, ибо визуально ячейка может находится в любом месте.
Цитата:
Сообщение от Omu Посмотреть сообщение
...Как отловить ошибку...
Читаем про "On Error".
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Как отловить сообщение от WM_CLOSE от "крестика"? graveman Win Api 3 01.10.2012 16:22
Как называется программа "дозвон по модему на указаный номер" hardhawker Софт 3 27.12.2011 14:30
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
TRichViewEdit - как отловить событие "курсор над таблицей" chandrasecar Компоненты Delphi 0 05.04.2009 20:04