У меня есть какой-то VBA для запуска интранет-сайта компании, который приведет меня непосредственно к документу, который я ищу. Мне нужно дождаться окончания загрузки страницы, а затем нажать кнопку «Печать», которая откроет документ на вкладке IE, поддерживаемой Adobe Reader, и оттуда я сохраню его в формате PDF на диске.
Моя проблема в том, что цикл, который я должен ждать до загрузки веб-страницы, не ожидает должным образом. Проведя некоторое исследование SO, я обнаружил, что это известная проблема с более новыми версиями IE. С тех пор я пытался поиграть с некоторыми XMLHTTP
методами, но я не знаком с ними, и мои попытки с ним также не увенчались успехом (не уверен, как перейти на следующую страницу, нажав ссылку «Печать» с помощью XMLHTTP
).
Мой текущий VBA выглядит следующим образом, а ieApp
равен New InternetExplorerMedium
.
Set objShell = CreateObject("Shell.Application")
IE_Count = 0
IE_Count = objShell.Windows.Count
For x = 0 To (IE_Count - 1)
On Error Resume Next
my_url = ""
my_title = ""
my_url = objShell.Windows(x).Document.Location
my_title = objShell.Windows(x).Document.Title
If my_url Like "http://ctdayppv002/Home/DocViewer?" & "*" Then
Set ie = objShell.Windows(x)
Do While ieApp.ReadyState <> 4 And ie.Busy
DoEvents
Loop
For Each ee In ie.Document.getElementsByTagName("a")
If ee.ID = "printDocLink" Then
ee.Click: DoEvents: Sleep 1500
Do While ie.ReadyState <> 4 And ie.Busy
DoEvents
Loop
Exit For
End If
Next ee
Exit For
Else
End If
Next
Если я добавлю кучу Sleep
времени, то он будет ждать, пока не появится документ, превышающий время, которое я сказал ему Sleep
, так что, очевидно, это не надежное решение.
Используя следующие вопросы для справки, я попытался использовать XMLHTTP
, но также заметил комментарии о том, что этот метод может не работать с сайтами JavaScript.
VBA висит на ie.byy и готовность проверить
просмотр веб-страниц с использованием vba с использованием XMLHTTP
Одна из моих попыток с XMLHTTP
:
Public ieApp As MSXML2.XMLHTTP60
Set ieApp = New MSXML2.XMLHTTP60
With ieApp
.Open "GET", urlString, False
.send
While ieApp.ReadyState <> 4
DoEvents
Wend
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLBody As MSHTML.HTMLBody
Set HTMLDoc = New MSHTML.HTMLDocument
Set HTMLBody = HTMLDoc.body
HTMLBody.innerHTML = ieApp.responseText
Debug.Print HTMLBody.innerHTML
End With
В полученном HTMLBody.innerHTML
я не вижу элемента "printDocLink"
.
К вашему сведению - я отправил электронное письмо представителю компании, которая создала базу данных веб-сайта, и они не верят, что существует вызов API, который может напрямую экспортировать в формате PDF, который, как я надеялся, будет доступен для пропуска " Кнопка «Печать» целиком.