vba タスクに IE が残る
vba タスクに IE が残る。
VBAでブラウザ経由でサイトのページの情報を拾い上げる技は結構使いますよね?
私だけ?www
そうすると、なぜかvba タスクに IE が残っていて、繰り返し利用するとどんどんと増えていき、それが原因でマシン全体が遅くなってしまう。
これが、一般的にサイト検索で見つかる構造です。
ところが、これで閉じてしまうと IE がタスクに残ってしまいます。
以下を標準モジュールに貼りつけて call Kill_IE を呼び出してあげれば、タスクから 「すべての」IEがいなくなります。
以下の方法は、IEを使い終わったら Nothing をセットすればいいということになっていますけど、これがあやまち。
最初の方がこの書き方をして検索上位に上がりそれが拡散された気配があります。
vba タスクに IE が残さずに IE を止めるには IE のオブジェクトには、実は Quit というリフレッシュするコマンドがあります。
Set objIE = Nothing の前に Quit してあげるとタスクに残らずに IE のオブジェクトを無効にすることができます。
盲点でした orz
VBAでブラウザ経由でサイトのページの情報を拾い上げる技は結構使いますよね?
私だけ?www
そうすると、なぜかvba タスクに IE が残っていて、繰り返し利用するとどんどんと増えていき、それが原因でマシン全体が遅くなってしまう。
VBAでサイトのページのHTMLを読み込む
VBAでサイトのページのHTMLを読み込む基本的な方法は以下の通り。Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = viewsw '見えるようにする objIE.Navigate "https://www.yahoo.co.jp/" While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend Set objIE = Nothing
これが、一般的にサイト検索で見つかる構造です。
ところが、これで閉じてしまうと IE がタスクに残ってしまいます。
IE のタスクを強制的に殺す
クロームなどを標準で使っている方は、タスクから強制的に排除してしまうという手があります。以下を標準モジュールに貼りつけて call Kill_IE を呼び出してあげれば、タスクから 「すべての」IEがいなくなります。
Option Explicit Dim objShell As Object Dim objExec As Object Sub Kill_IE() Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec("taskkill.exe /F /IM iexplore.exe") End Sub
本当は、使い方が間違っていた IE 呼出し。だからタスクが残るんです
実は、調べてみたら、先の一連の構造は間違っていました。以下の方法は、IEを使い終わったら Nothing をセットすればいいということになっていますけど、これがあやまち。
最初の方がこの書き方をして検索上位に上がりそれが拡散された気配があります。
Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = viewsw '見えるようにする objIE.Navigate "https://www.yahoo.co.jp/" While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend Set objIE = Nothing
vba タスクに IE が残さずに IE を止めるには
vba タスクに IE が残さずに IE を止めるには IE のオブジェクトには、実は Quit というリフレッシュするコマンドがあります。
Set objIE = Nothing の前に Quit してあげるとタスクに残らずに IE のオブジェクトを無効にすることができます。
Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = viewsw '見えるようにする objIE.Navigate "https://www.yahoo.co.jp/" While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend objIE.Quit Set objIE = Nothing
盲点でした orz
スポンサーリンク