2016-10-02 8 views
0

IEインスタンスを終了する行を含めると、Do Untilにオートメーションエラーが発生するか、マクロがフリーズします。この行は、古いプロセスがメモリにないことを確認するために使用されます。VBA - シェル経由でInternet Explorerプロセスを終了する

デバッグに入り、シェル行を実行して少し待っているので、次の行を実行する前にIEがロードされる可能性があるので、この問題は表示されません。

IEアプリケーションの準備ができているかどうかを検出する方法はありますか? name='iexplore.exe'name='iexplore.exe *32'に置き換えても、32ビットプロセスが消えない場合があります。おそらく1つが消えてしまい、他のインスタンスを殺すことができます。

Shell ("C:\Windows\system32\cmd.exe /c wmic process where name='iexplore.exe' call terminate") 

Link = "http://www.example.com" 
Set ie = CreateObject("InternetExplorer.Application") 

ie.Navigate Link 

Do Until ie.ReadyState = 4 And ie.Busy = False 
    DoEvents 
Loop 

答えて

1

WMICは単にオブジェクトを呼び出します。あなたはそれらを直接呼び出すことができます。

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process") 

For Each objItem in colItems 
    'msgbox objItem.name & " " & objItem.ProcessID & " " & objItem.CommandLine 
    If objItem.name = "iexplore.exe" then objItem.terminate 
Next 

どのビット数であっても名前はIExplore.exeです。

シェルフォルダにアクセスするには(エクスプローラとInternet Explorerのウィンドウ[歴史上の理由])。これは、5秒ごとにすべてのシェルウィンドウをリフレッシュします。私はmsgboxを追加しました。

Set objShell = CreateObject("Shell.Application") 
    Do 
     Set AllWindows = objShell.Windows 
     Count = 0 
     For Each window in AllWindows 
      msgbox window.locationname 
      window.refresh2 3 
`To close a shell window 
`window.close 
      Count = Count + 1 
     Next 
     If Count = 0 then Exit Do 
     Wscript.sleep 5000 
    Loop 
関連する問題