Internet Explorerウィンドウ内にユーザーフォームを作成するVBScriptがあります。このウィンドウは、CreateObject(InternetExplorer.Application)を使用して作成されます。問題は、ユーザーがx'ing outでこのウィンドウを閉じると、ウィンドウは閉じますが、スクリプトはエラーをスローします。私はこのエラーを避けたい。私はエラーに関してより具体的にすることはできません。なぜなら、毎回違うからです。私のスクリプトにはループがあり、エラーは、ユーザがx'ingでプログラムを閉じたときにスクリプトが実行していたループ内のどの行を指しているようです。VBScript - ユーザーがIEユーザーフォームを閉じるときにエラーが発生する
私はこれを行うための一つの方法は、wscript.CreateObject(InternetExplorer.Application、「IE_」)を使用して、使用することを知っている:
Sub IE_onQuit
wscript.quit
End Sub
残念ながら、これは通訳として、私のために動作しません。私はこのコードを実行する必要があるデバイスで使用されてwscriptオブジェクトを認識しません。私のコードはIE 11搭載のWindows 7マシン上で動作するTecanのEVOwareを介して実行されています。EVOwareは、独自のインタプリタにバンドルされているように見え、Windows OSに組み込まれているものを利用しません。 EVOwareのVBscriptインタープリタに関するドキュメントは、少なくとも私が見つけることができるものはありません。しかし、上記で説明したIE_onQuitメソッドを使用せずに、Windowsインタプリタを使用してvbsファイル経由で直接実行すると、同じエラーが発生するため、エラーはEVOware固有のものではありません。 EVOwareのために私はwscriptソリューションを利用できません。
また、On Error Resume Nextを使用してみましたが、これもうまくいきません。これは、スクリプトが無限ループに巻き込まれ、タスクマネージャのプロセスを終了しない限り閉じることがないためです。
wscriptを使用せずに目標を達成する方法はありますか(つまり、エラーを起こさずにユーザーがウィンドウをx-outできるようにする)方法はありますか?あるいは、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
次上記の私のコードでdoループ内のように動作しないライン「の場合sProtocol_Type = 『』またはsNumber_of_Plates = 『』またはsDispense_Volume = 『』その後 MsgBoxには、」すべてのフィールドを完了しなければならないです!送信前にすべての値を入力してください。 "、vbCritical" On Error Resume Nextを使用すると、プロセスを終了するまでMsgBoxステートメントが無限に作成されます。 – margentieri