powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получение списка всех открытых окон... или странная необрабатываемая ошибка
6 сообщений из 6, страница 1 из 1
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813397
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При помощи нижеприведенного макроса из Excel можно получить полный список имен открытых окон.

Принцип работы можно посмотреть в справке по Word
http://msdn.microsoft.com/ru-ru/library/ff822559.aspx#CommunityContent


'В файле использующем этот макрос - надо подключить Microsoft Word Object Library

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub Полный_список_окон_2()
Dim wordApp As Object
Dim mytask
Dim i As Integer


i = 2
'Открываем word
Set wordApp = CreateObject("Word.Application")
'перебираем в цикле ИЗ ВОРДА!!! имена открытых окон
For Each mytask In Tasks
'записываем в ячейку каждое имя
Sheets("Лист1").Cells(i, 1) = mytask.Name
i = i + 1
Next mytask
wordApp.Quit
Set wordApp = Nothing

End Sub




Обратил внимание, что данный макрос срабатывает не всегда.

Например, при помощи диспетчера закрываем ВСЕ процессы WINWORD.EXE... и начинается странное

Запускаем макрос - вылезает ошибка 462. Нажимаем End... запускаем по новой - все работает...

Опять удаляем все ВСЕ процессы WINWORD.EXE...

Пробуем проигнорировать ошибку On error resune next - не игнорируется... вылезает ошибка 462

Пробую обработать ошибку, в тайной надежде, что простой двоекратный запуск решит проблему...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub Полный_список_окон_3()
Dim wordApp As Object
Dim mytask
Dim i As Integer
i = 2
On Error GoTo 1
'Открываем word
Set wordApp = CreateObject("Word.Application")
'перебираем в цикле ИЗ ВОРДА!!! имена открытых окон
For Each mytask In Tasks
'записываем в ячейку каждое имя
Sheets("Лист1").Cells(i, 1) = mytask.Name
i = i + 1
Next mytask
wordApp.Quit
Set wordApp = Nothing

Exit Sub
1
Exit Sub
End Sub



Ничего не получается. Как програмно обработать ошибку?
...
Рейтинг: 0 / 0
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813415
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное это ошибка не Excel, а Word... и программа пытается обратится к уже уничтоженному экземпляру Word, не обращая внимания на только что открытый экземпляр Word...

Тогда надо явно обращаться к новому экземпляру... типа

Код: vbnet
1.
For Each mytask In wordApp.Tasks
...
Рейтинг: 0 / 0
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813422
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K'В файле использующем этот макрос - надо подключить Microsoft Word Object Libraryв данном случае как раз не обязательно

Непонятно, что за объект Tasks, откуда он берется?
Dan-Kи программа пытается обратится к уже уничтоженному экземпляру Wordне пытается. Объект Tasks просто-напросто не определен - отсюда и ошибка
Dan-K
Код: vbnet
1.
For Each mytask In wordApp.Tasks

именно так и надо, только не ясно, вы решили свою проблему или остались вопросы?
...
Рейтинг: 0 / 0
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813701
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему решил.
Но без подключения библиотеки - не работает...
...
Рейтинг: 0 / 0
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813705
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глянул описание ошибки 462:

Для автоматизации Word вы определяете объектную переменную, обычно ссылающуюся на объект приложения или документа Word. Другие объектные переменные могут ссылаться на объекты Selection, Range или другие объекты объектной модели Word. При написании кода, использующего объект, метод или свойство Word всегда необходимо предварять вызов объекта, метода или свойства Word соответствующей объектной переменной. Если вы этого не сделаете, Visual Basic будет использовать ссылки на глобальные переменные, которые установлены на выполняющиеся в данное время запросы. Если Word прекратит свою работу, или если объявленная объектная переменная освободится, то скрытая глобальная переменная будет ссылаться на неверный (уничтоженный) объект. После повторного запуска кода автоматизации вызов этой скрытой объектной переменной будет завершен с вышеупомянутой ошибкой.
...
Рейтинг: 0 / 0
Получение списка всех открытых окон... или странная необрабатываемая ошибка
    #37813745
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-KНо без подключения библиотеки - не работает...значит не работает тот код, который вы не привели. Приведенный будет работать без подключения библиотеки.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получение списка всех открытых окон... или странная необрабатываемая ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]