Я унаследовал этот скрипт VBA от моего предшественника. Он отлично работает для меня в Excel 2013 до недавнего времени, когда мне сказали, что мне может понадобиться работать из дома. Выясните, что среда Office 2016 моего недавно подключенного рабочего стола VPN не любит этот сценарий. Я продолжаю получать «Компьютер удаленного сервера неизвестен или недоступен» , когда он достигает .ReadyState <> READYSTATE_COMPLETE
.
Навигация не удалась, так как я вижу окно, в котором она успешно перешла на URL, и могу правильно взаимодействовать с ним. Странная вещь, если я изменю URL на «www.google.com», я получу действительный результат состояния готовности. Мне также нужно выяснить, как позднее связывать Shell Windows, чтобы она работала одновременно с библиотеками v15 и v16.
Цель этого сценария - автоматизировать процесс, который 1. Открывает внутреннюю базу данных на DBurl
через веб-интерфейс 2. Управляет и запускает скрипт java, расположенный на веб-странице. 3. Закройте окно браузера, не закрывая другой браузер windows Это может быть изменено для использования кем-то другим путем поиска элемента страницы, такого как поле поиска или кнопка c на странице, и взаимодействия с ним. Редактировать: Дополнительное тестирование показало, что пауза и пропуск Do While
l oop и возобновление на IETab1 = SWs.Count
приводят к тому, что этот сценарий работает в Office 2016. Единственная проблема - без l oop, страница не еще не готовы к следующему шагу, когда скрипт пытается запустить взаимодействие. Подождите 5 секунд вместо лейкопластыря l oop. Поиск причины, по которой .ReadyState
не будет читать, решит эту проблему.
Declare PtrSafe Function apiShowWindow Lib "user32" Alias "ShowWindow" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Sub OpenWebDB()
Dim ieApp As Object
Dim SWs As ShellWindows
Dim IETab1 As Integer
Dim JScript As String
Dim CurrentWindow As Object
Dim DBurl As String
Dim tNow As Date, tOut As Date
DBurl = "My.Database.url"
Set SWs = New ShellWindows
tNow = Now
tOut = tNow + TimeValue("00:00:15")
If ieApp Is Nothing Then
Set ieApp = CreateObject("InternetExplorer.Application")
With ieApp
.Navigate DBurl
Do While tNow < tOut And .ReadyState <> READYSTATE_COMPLETE
DoEvents
tNow = Now
Loop
IETab1 = SWs.Count
End With
End If
If Not tNow < tOut Then GoTo DBFail
On Error GoTo DBFail
Set CurrentWindow = SWs.Item(IETab1 - 1).Document.parentWindow
JScript = "javascript: DoSomething"
Call CurrentWindow.execScript(JScript)
On Error GoTo 0
SWs.Item(IETab1 - 1).Quit
Set ieApp = Nothing
Set SWs = Nothing
Exit Sub
DBFail:
MsgBox (DBurl & vbCrLf & "took too long to connect or failed to load correctly." & vbCrLf & _
"Please notify the Database manager if this issue continues."), vbCritical, "DB Error"
SWs.Item(IETab1 - 1).Quit
Set ieApp = Nothing
Set SWs = Nothing
End Sub