2014-01-21 4 views
2

Я нашел и внедрил код Excel VBA, чтобы открыть веб-страницу, а затем открыть связанный файл.Excel 2003 Код VBA работает при переходе через него, но не при полном запуске

Он работает, когда я нахожу его, но когда он работает полностью, он не открывает файл.

Sub CallWebPage() 

Dim URL As String 
Dim ieApp As Object 
Dim ieDoc As Object 
Dim ieForm As Object 
Dim ieObj As Object 
Dim objColl As Collection 

URL = "http://sdrk3020v/mi_toolbox/default.asp?query_name=spBUS_GCR_AllSchemes&app_id=2&FileType=csv&btnRunQuery=Run+query" 

Set ieApp = CreateObject("InternetExplorer.Application") 
ieApp.Visible = True 
ieApp.navigate URL 

While ieApp.Busy 
    'wait... 
Wend 

Set ieDoc = ieApp.Document 
For Each ele In ieApp.Document.getelementsbytagname("a") 

    If ele.innertext = "query_1" Then 
     DoEvents 
     ele.Click 
    End If 
Next 

ieApp.Quit 
End Sub 
+0

Ваш код работает отлично .. Я просто обновил URL и изменил 'InnerText'. –

ответ

1

Caveat - Я понятия не имею, что происходит с вашим кодом

С этой оговоркой, учитывая, что ваш код выходит в реальный мир, чтобы открыть веб-страницу, я предполагаю, что разница между успехом и неудачей связано с time.

IE Когда вы делаете шаг, код получает достаточное время для завершения, так что, когда код, чтобы щелкнуть ссылку, запускается, все отлично настроено, так что все работает.

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

Такая вещь называется Race Condition (несколько частей кода участвуют в гонках, чтобы увидеть, кто туда попал), и решение состоит в том, чтобы выяснить, как остановить это. Это может означать поиск определенного статуса, в котором говорится, что веб-страница на самом деле действительно загружена на 100% (лучший сценарий) или такая же глупость, как и временная задержка в критической точке, что позволяет на 99,999% дольше, чем время установки наихудшего случая (что очень плохо и может привести к ужасному обнаружению ошибок позже, когда вы нажмете на эту 0.0001% ситуацию - как вы знаете, вы зафиксировали состояние гонки с вашей задержкой)

1

Попробуйте использовать DoEvents, это остановит превосходство от работы до фоновые процессы завершены. Это может помочь у решить проблему

С уважением Umesh

Смежные вопросы