三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

3/27 起動しているIEを全て閉じたい。

www.youtube.com

起動しているIEを全て閉じたい。
http://www.youtube.com/watch?v=uQKlDRNm4k8

こんにちは。

>NO156を参考にさせていただき、起動済みのIEを探して、順にすべてをQUITし、新しくIEを立ち上げたいのですが、
>すべて処理(QUIT)する前にループを抜けてしまいます。
>ちなみにIE数を確認しているかmsgboxで確認したのですが、起動分数えていました。(ほとんどパクっているので当然ですよね・・・すんません。)
>Private Sub CommandButton1_Click()
> Set objShell = CreateObject("Shell.Application")
> For Each objWindow In objShell.Windows
> Set objIE = objWindow
> MsgBox "確認" & objIE
> objIE.Quit
> Next
> 'Set objShell = Nothing
>
>Set objIE = CreateObject("InternetExplorer.application")
> objIE.Visible = True
>話がうまくまとめられず申し訳ないのですが、msgboxで確認した起動数と、
>数えているはずなのに処理せず抜けてしまう矛盾に疑問を感じ質問したしだいです。

For Each objWindow In objShell.Windows
のループで、中身がリアルタイムに変わっていくと
(ここでは、ループの中で .Quit してます。)
うまく全てを取れないみたいです。


↓Debug.Print objShell.Windows.Count を 入れてみました。
これで、確認してみてください。

Sub bbb() 'ここで、.Quitで終わらせる。
Dim objShell As Object
Dim objWindow As Object
Dim objIE As Object

Set objShell = CreateObject("Shell.Application")

For Each objWindow In objShell.Windows
Debug.Print objShell.Windows.Count
Set objIE = objWindow
MsgBox "確認" & objIE & objShell.Windows.Count
objIE.Quit
Next
Set objShell = Nothing

End Sub
↑、カウンターの減り方が変ですよね。※あっ、そもそも減っちゃまずいのかなぁ。
※ループ中にobjShell.Windowsの内容が変化してしまうので、
For Each objWindow In objShell.Windows で 順番に取得できないみたいです。

なので、後ろからまわしてみる。そんな処理に変更してみました。

Sub ccc() 'ここで、.Quitで終わらせる。
Dim objShell As Object
Dim objIE As Object
Dim n As Integer

Set objShell = CreateObject("Shell.Application")

'後ろから消してく。
For n = objShell.Windows.Count To 1 Step -1 'MAXから-1ひいてく感じ
Set objIE = objShell.Windows(n - 1) 'n番目のウインドウを代入
MsgBox "確認" & objIE
objIE.Quit
Next
Set objShell = Nothing

End Sub

※objShell.Windows(0)から始まっているので、n-1としてます。
※※IEだけじゃなくて、C:やD:全てのファイルエクスプローラーも閉じちゃうけど。

疑問は、解決されましたか?
何かの参考となれば、幸いです。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)