Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
20.04.2024, 05:16:28

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Word и VBA
| | |-+  Как отловить ошибку "5941: Запрашиваемый номе
Страниц: [1]   Вниз
Печать
Автор Тема: Как отловить ошибку "5941: Запрашиваемый номе  (Прочитано 12876 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Omu
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« : 07.12.2015, 19:57:30 »

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

Сразу скажу, можно прочитать ячейки из первой строки таблицы, примерно так
MsgBox ActiveWindow.Document.Tables(2).Rows(1).Cells(i).Range.Text
но меня интересуют данные в столбцах, так что ошибка все равно вылезет позже.
Так же, если в первую ячейку добавить хотя бы строку, ошибка исчезает, но надо исключить принципиальную возможность ошибки, учитывая что она уже найдена.

Модератору: Эта тема предназначена для другого раздела. Я здесь первый раз и не знаю как удалять темы. Если можно  перенесите эту тему в раздел Вопросы по Word и VBA или удалите ее.
« Последнее редактирование: 07.12.2015, 20:13:43 от Omu » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 07.12.2015, 21:11:04 »

но надо исключить принципиальную возможность ошибки
Это вряд ли. Можно минимизировать.
Но без Вашего кода и файла трудно сказать что-то конкретное, т.к. непонятно зачем вставлять таблицу в таблицу и потом что-то с них считывать.
Приложите файл с кодом создания таблиц - тогда видно будет, что можно сделать.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Omu
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #2 : 10.12.2015, 23:42:16 »

Код приведен на картинке, это команда создания таблицы, повторенная дважды без смещения курсора.
Конечно можно предполагать, что в здравом уме такого делать никто не будет, но без ума можно всякого навыдумывать, мне по жизни приходилось видеть разные коленца в ворде, в том числе и таблицу в таблице. Кроме того следует ожидать, что подобное случится по ошибке, как например у меня, безо всякой задней мыли.
Почему я хочу выявить ошибку в таблице до возникновения ошибки в программе? потому что такой у меня стиль программирования, я считаю, что известные ошибки надо предупреждать (писать код так чтобы они не выскакивали)
Мне подсказали использовать метод cell класса table, он вроде ошибки не вызывает, попробую переписать программу  под него.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #3 : 11.12.2015, 10:06:09 »

Код приведен на картинке
Всегда радовал такой подход. Это форум не по Фотошоп. Так почему для помощи кому-то здесь должны переписывать коды с картинок? Вы считаете это нормальным? Я нет. Тем более что код создания таблицы виден не полностью. Видимо, предупредить создание таблицы внутри другой можно так: проверяйте, не расположен ли курсор внутри таблицы. Можно применить цикл по таблицами и проверить - не находится ли курсор внутри одной из таблиц:
Код: (vb)
dim bInTable as boolean,wdTbl as table
for each wdTbl in wd.tables
if Selection.Range.InRange(wdTbl.Range) then
    bInTable=true:exit for
end if
next
MsgBox "Курсор " & IIf(bInTable, "внутри таблицы", "вне таблиц"), vbInformation

« Последнее редактирование: 11.12.2015, 10:16:50 от The_Prist » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru