У меня есть VBScript, который создает пользовательскую форму в окне Internet Explorer. Это окно создается с помощью CreateObject (InternetExplorer.Application). Проблема в том, что если пользователь закрывает это окно путем x'ing out, окно закрывается, но скрипт затем выдает ошибку. Я хочу избежать этой ошибки. Я не могу быть более конкретным в отношении ошибки, поскольку она отличается почти каждый раз. В моем скрипте есть цикл, и ошибка, кажется, указывает на любую строку внутри этого цикла, которую выполнял мой скрипт, когда пользователь закрывает программу путем x'ing out.VBScript - ошибка при закрытии пользователем пользовательской формы IE
Я знаю, что один из способов сделать это состоит в использовании WScript.CreateObject (InternetExplorer.Application «IE_»), а затем использовать:
Sub IE_onQuit
wscript.quit
End Sub
К сожалению, это не будет работать для меня, как переводчика используемый устройством, мне нужно запустить этот код, не распознает объект wscript. В случае, если это имеет значение, мой код выполняется через EVOware от Tecan, работающий на компьютере под управлением Windows 7 с IE 11. EVOware, похоже, поставляется вместе со своим собственным интерпретатором и не использует встроенную в ОС Windows. Никакой документации по интерпретатору VBscript EVOware, похоже, не существует, по крайней мере, никому из них не удалось найти. Однако, не используя метод IE_onQuit, описанный выше, мой код будет вызывать ту же ошибку при выполнении непосредственно через файл vbs с помощью интерпретатора Windows, поэтому ошибка не является чем-то специфичным для EVOware; просто я не могу использовать любые решения wscript из-за EVOware.
Я также попытался использовать On Error Resume Next, но это также не работает, потому что это заставляет мой скрипт попадать в бесконечный цикл и никогда не закрываться, если я не убью этот процесс в диспетчере задач.
Есть ли способ достичь моей цели (т. Е. Разрешить пользователю x-out из окна без ошибки) без использования wscript? Альтернативно, отключение кнопки x-out также будет приемлемым решением; тем не менее, скрытие этих кнопок, делая полный экран окна IE не является.
Вот пример моего кода:
sHTMLCode = some html code
Set IE = CreateObject("InternetExplorer.Application")
With IE
.ToolBar = False
.StatusBar = False
.Resizable = False
.Height = 500
.Width = 400
.Left = 600
.Top = 200
.Visible = True
CreateObject("WScript.Shell").AppActivate "Internet Explorer"
.Navigate "about:blank"
While .ReadyState <> READYSTATE_COMPLETE
Sleep 0.01
Wend
.document.title = "Title"
.document.body.style.backgroundcolor = "lightgrey"
.document.body.innerHTML = "<center>" & sHTMLCode & "</center>"
Do Until Protocol_Type <> "" And Number_of_Plates <> "" And Dye_Source <> ""
If .document.all.done.value = "clicked" Then
.document.all.done.value = False
.
.
.
stuff
.
.
.
Protocol_Type = sProtocol_Type
Evoware.SetStringVariable "Protocol_Type",Protocol_Type
Number_of_Plates = sNumber_of_Plates
Evoware.SetDoubleVariable "Number_of_Plates",Number_of_Plates
Dye_Source = sDye_Source
Evoware.SetStringVariable "Dye_Source",Dye_Source
Else MsgBox "Please re-enter your protocol parameters.", vbInformation
End If
End If
Loop
.document.all.done.value = True
.Quit
End With
On Error Resume Next не работает в Do Loop в моем коде выше, является строка «Если sProtocol_Type =„“Или sNumber_of_Plates =„“Или sDispense_Volume =„“Тогда MsgBox» Все поля должны быть заполнены ! Пожалуйста, введите все значения перед отправкой. ", VbCritical" Использование On Error Resume Next приводит к тому, что оператор MsgBox создается бесконечно, пока не закончу процесс. – margentieri