Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получение списка всех открытых окон... или странная необрабатываемая ошибка / 6 сообщений из 6, страница 1 из 1
27.05.2012, 15:21
    #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
27.05.2012, 15:39
    #37813415
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех открытых окон... или странная необрабатываемая ошибка
Наверное это ошибка не Excel, а Word... и программа пытается обратится к уже уничтоженному экземпляру Word, не обращая внимания на только что открытый экземпляр Word...

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

Код: vbnet
1.
For Each mytask In wordApp.Tasks
...
Рейтинг: 0 / 0
27.05.2012, 15:50
    #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
27.05.2012, 22:38
    #37813701
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех открытых окон... или странная необрабатываемая ошибка
Проблему решил.
Но без подключения библиотеки - не работает...
...
Рейтинг: 0 / 0
27.05.2012, 22:42
    #37813705
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех открытых окон... или странная необрабатываемая ошибка
глянул описание ошибки 462:

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


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