Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Сбоит циклическая навигация объекта IE в Win7


Автор: ZGNICO 24.11.2015, 22:36
Здравствуйте, уважаемые формучане! Наткнулся на проблему при разработке, перекопал много ресурсов и учебников, но решения пока не вижу. То ли сам дурак, то ли лыжи не смазаны... Словом, имею рабочий макрос, цель которого - перебор большого количества web-страниц в локальной сети (из Internet нет доступа, так что показать код в полной мере нет возможности, простите) с выпиской необходимой мне информации. Условно говоря, приложение перебирает учетные карточки, ищет в них некую систематику по забитому мною алгоритму и выдает юзверю краткий статистический отчет с некими критичными для работы сведениями. 
До недавних пор (стояла ОС Windows XP на рабочем месте, под ней все и писалось прямо там) все работало без сбоев (более года, каждую ночь - ни одного глюка при исполнении кода нет; отчеты сохранились). В минувшую пятницу на рабочем месте обновили железо, и теперь имею ОС Windows 7. С макросом произошел занятный глюк... 130 учетных карточек (+/- 10) перебирает нормально. На 131ой возникает сбой. Сами карточки нормальные, никаких принципиальных отличий в них нет (ищу существующие на них объекты, все вроде как стабильно). Природа сбоя мне не понятна, однако подозреваю, что дело в объекте Internet Explorer, который (сколь я могу судить) изменился вместе с изменением версии Windows. Цикл перебора организован примерно так (Excel 2007):
Код

'создаем объект IE, объявление без With Events (как его реализовать - я так и не понял, но без него работало нормально вплоть до обновления версии Windows)
Dim ObjIE As InternetExplorer                   'Рефер на экземпляр объекта IE в оперативной памяти
    Set ObjIE = CreateObject("InternetExplorer.Application")        'Создаем экземпляр объекта
    ObjIE.Visible = False                                           'Прячем окно от пользователя
'...

'далее организован цикл, в котором на каждом шаге формируется адрес, и осуществляется навигация на него с последующим поиском элементов WEB-страницы и выпиской на лист Excel значений свойств этих элементов (тестовые поля, списки и т.п.).
For i = 1 to N    
     ObjIE.Navigate WebAddrServ(i)
    'Ожидание загрузки данных:
    While ObjIE.Busy Or ObjIE.readyState <> 4
        DoEvents            'передаем управление другим приложениям
    Wend
    'Собственно - тут и есть камень преткновения: проведя 130 навигаций нормально и без сбоев на 131 получаем некую ерунду, притом не ясно какую именно: объект просто не загружает страницу, и этот While может длиться бесконечно... 
     'далее обработка данных со страницы и выписка нужной информации.
Next i

'...


Пробовал:
1. Внедрять таймер на таймаут (ждем 20 секунд, если так и не загрузилась страница - перезапускаем ее загрузку. Не дает результата. Объект все равно остается Busy хоть до посинения. 
Самое веселое, что если просто открыть в фоне IE и вбить в его адресную строку WebAddrServ(i), навигация проходит без сбоев, все открывается сразу.

Есть ли у кого мысли по этому поводу? Может, кто сталкивался с подобной проблемой? Буду  рад любой помощи... Ну кроме широкого посыла к гуглу (ибо, как уже говорилось ранее - копал я его, не вижу ничего полезного).

Всем заранее большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)