[三流君]
[VBAで楽しく]
[VBA IE 操作]
−−> No.156 TypeNameとShell.Applicationを使い起動済みのIEを探す
TypeNameとShell.Applicationを使い起動済みのIEを探す
メルマガ発行内容
<TypeNameとShell.Applicationを使い起動済みのIEを探す>
どうも、三流プログラマーのKen3です。
今回は、
起動しているIEを探してみます。
今回の、サンプルファイルは、
http://www.ken3.org/vba/lzh/vba156.lzh
にvba156.xls(Excel2000版)が保存されています。
※IEを起動したり、テストでファイルエクスプローラーを立ち上げたりして
遊んでみてください。
関連項目、
VBAでInternetExplorer.Applicationを操作する(IE操作)
http://www.ken3.org/cgi-bin/group/vba_ie.asp
もヨロシクね。
/*
* 1.今回のキッカケ
*/
VBA系の掲示板
http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi
で、
----
excelvbaでIEを立ち上げて、ビジーかどうかを取得する方法はわかりましたが、IE
のサブウィンドウがビジーかどうかを取得し、サブウィドウが表示されるまで待つ
、というのを作りたいんですがどうするのでしょう。
サブウィンドウのIDを取得してから
Do While objIE.Busy = True
DoEvents
Loop
とするのでしょうか。
サブウィンドウのIDはどう取得するのでしょう。
----
と、質問をいただきました。
う〜ん、、、どうするんだろう?
いままで、CreateObjectを使って新規にIEを起動したり、
例)IEのオブジェクトを作成
Dim objIE As Object 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True '見えるようにする(お約束)
や、
フォームにWEBのコントロールを貼ったりして、IEをコントロールしてました。
自分のプログラムからオブジェクトを作成して、目的の動作、作業を行っていました。
^^^^^^^^^^^^^^^^
今回の開いた別IEを参照したい
や
よくある話で、IEでwebページを見ていたら、
ツールを起動して、作業したい、そんな要望もあると思います。
※データをgetするツールを作ったとして、
自分のフォームや自分の起動したIEだけじゃなくて、
既に起動済みのIEに対して、何か処理を行いたい・・・など。
/*
* 2.Shell.Applicationのウインドウをループで探る
*/
googleで探ると、いろいろと方法ありそうです。
チョット目を引いたのが、
Shell.Applicationのウインドウをループで探しているプログラムでした。
IEとShellは密接な関係があるのか?一部なのか?
Shell.ApplicationからIEを探すことが出来るみたいです。
http://www.microsoft.com/JAPAN/developer/library/jptech/msdnnews/web.htm
を見ると、なんとなく、そんな感じもしなくも無く
(記事はフォルダーのカスタマイズで関係ない記事なんですが、)
Shellが持っている(管理している)ウインドウを表示する。
Sub aaa()
'オブジェクトを格納する変数
Dim objShell As Object, objWindow As Object
'シェルのオブジェクトを作成する
Set objShell = CreateObject("Shell.Application")
'ウインドウの数だけまわすぞ
For Each objWindow In objShell.Windows
'TypeNameでオブジェクト変数のタイプを表示する
MsgBox "タイプは:" & TypeName(objWindow.document)
Debug.Print "タイプは:" & TypeName(objWindow.document)
Next
Set objShell = Nothing
End Sub |
単純に、
For Each で objShell.Windows を指定して、回し、
初めて使った、TypeName関数で、オブジェクトのタイプを表示してみました。
IEやエクスプローラーを複数起動して、実行すると。
タイプは:IShellFolderViewDual2
タイプは:HTMLDocument
タイプは:HTMLDocument
タイプは:IShellFolderViewDual2
と、値が取れます。
/*
* 3.見つけたObjectに対して、処理を行う
*/
タイプは:HTMLDocument
コイツがアヤシイデス(原稿書いてる今は、確信してるんだけど(笑))
この、オブジェクトに対して、処理を行ってみます。
Sub aaa()
'オブジェクトを格納する変数
Dim objShell As Object, objWindow As Object
'シェルのオブジェクトを作成する
Set objShell = CreateObject("Shell.Application")
'ウインドウの数だけまわすぞ
For Each objWindow In objShell.Windows
'TypeNameでオブジェクト変数のタイプを表示する
MsgBox "タイプは:" & TypeName(objWindow.document)
Debug.Print "タイプは:" & TypeName(objWindow.document)
'HTMLDocumentだったら
If TypeName(objWindow.document) = "HTMLDocument" Then
'URLとタイトルを表示する
MsgBox "IEみつけたよ" & objWindow.document.Title
Debug.Print "タイトル:" & objWindow.document.Title
Debug.Print "URL:" & objWindow.document.URL
End If
Next
Set objShell = Nothing
End Sub |
単純に、
TypeName(objWindow.document) = "HTMLDocument"
だったら、
.Title や .URL と アクセスしてます。
使いやすいように、1つ変数を用意して、
~~~~~~~~~~~~~~~~~
見つけたオブジェクトを代入して、操作することも出来ます。
Sub bbb()
'オブジェクトを格納する変数
Dim objShell As Object, objWindow As Object
Dim objIE As Object
'見つけたか判断用のフラグ
Dim nFLG As Boolean
nFLG = False
'シェルのオブジェクトを作成する
Set objShell = CreateObject("Shell.Application")
'ウインドウの数だけまわすぞ
For Each objWindow In objShell.Windows
Debug.Print "タイプは:" & TypeName(objWindow.document)
'HTMLDocumentだったら
If TypeName(objWindow.document) = "HTMLDocument" Then
'オブジェクトを代入する
Set objIE = objWindow
nFLG = True '見つけたよ
Exit For '初めに見つけたオブジェクトを代入
End If
Next
Set objShell = Nothing
'フラグをチェックして、ページに飛ばす
If nFLG = True Then
'テストで日記ページに飛ばす
objIE.Navigate "http://blog.melma.com/00034126/"
'↑いつものように、使えることを確認
If MsgBox("確認 IEを.QUITで閉じますか?", vbYesNo) = vbYes Then
objIE.Quit '.quitメソッドを使ってみた
End If
Else
MsgBox "IEのオブジェクトを見つけられなかったです"
End If
End Sub |
手抜きで、IEを見つけたら、
Set objIE = objWindow
と代入後、Exit Forしてますが、実際はURLやタイトルなどで、
目的のIEか?チェックしてください(複数IEが起動しているときを考慮してね)
objIEに代入されているので、あとは、いつもの操作を行えばOKです。
好きに操作してください。
objIE.Navigate "http://blog.melma.com/00034126/"
なんて感じで、指定ページに飛ばしたり、
objIE.Quit
で、閉じたりしてます。
/*
* 4.終わりの挨拶
*/
今回は、
起動済みのIEをShellアプリケーションから探ってみました。
ポイントは、TypeName関数で、
Shellが持っている(管理している)ウインドウを1つ1つ
オブジェクトの名前で判断してるところです。
何か読者の心に残れば、うれしいです。
*私の独り言をうまく消化してくださいね。
いつも失敗?の負け組のKen3でした。
~~~~~~~(↑オイオイ)
フィードバック
VBA系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列