非表示にできる< 目次 >
はじめに
EXCEL VBAでIE(InternetExploer)を制御する方法について触れようと思います。
本ブログ記事は、Crowd Works で納品まで行い、実際にお金になったコードを元に紹介します。
本記事でできること
EXCEL-VBAにおけるDOM(Document Object Model)でのブラウザ制御で、
Web からのメッセージの"OK”ボタンを押下することができます。
別方法も記事にしました
本記事の内容で 上手く行かないケースがある場合は、こちらの記事も試してみて下さい。
-
【EXCEL】VBA-IE制御でWebページからのメッセージのOKを押す方法【JavaScriptを使う】
続きを見る
VBAでJavaScriptを利用し制御する方法を紹介しています。(JavaScriptを知らなくてもOK)
Webページからのメッセージとは?
VBAでWebブラウザ制御の自動化プログラムを作成するにおいて、たまにWeb制御ではなく、システム制御をしないといけない場合があります。
例えば このようなウィンドウです。
Webブラウザだけの制御しか知らなかった当時の僕は、
この『Webページからのメッセージ』をWebブラウザと思い込んでて、
Google検索などでたくさん探したのですが 全くの見当違いの調べ方だったことから途方にくれてました。
プログラム初学者にとってGoogle検索やプログラム書籍などで直感的に調べることができないのがプログラムスキル取得のおいてのハードルを上げる要因だと未だに思っています。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-準備- 'ダイアログウィンドウを探す Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr 'Postmassage Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long sub システムダイアログのOKボタンを押す方法() 〜省略〜 hWindow = FindWindow("#32770", "Web ページからのメッセージ") PostMessage hWindow, WM_COMMAND, vbOK, 0& 'システムダイアログのOKボタンを押す 〜省略〜 end sub |
コードの説明
途中のコードは省きましたが、システムダイアログのウィンドウがWebブラウザ制御(IEブラウザ制御)で出現したら、↑のコードを元に試してみましょう。
この際の注意点ですが、Sub〜EndSubの本番プログラムの手前に、システム制御を行うためのプログラムを記載しておいて準備が必要です。
1 2 3 4 5 6 7 |
-準備- 'ダイアログウィンドウを探す Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr 'Postmassage Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long |
Private Declare Function で事前に宣言していたシステム制御プログラムは、Sub〜EndSub内で使用可能となります。
実際に、Webブラウザ制御で、システムダイアログが発生したら、以下のコードを記載しましょう。
1 2 |
hWindow = FindWindow("#32770", "Web ページからのメッセージ")'FindWindowでシステムダイアログのウィンドウを探します。Webページからのメッセージというタイトル+固有のウィンドウハンドル値である#32770の条件に合致するWindowをFindするという意味です。 PostMessage hWindow, WM_COMMAND, vbOK, 0& 'システムダイアログのOKボタンを押す |
解説は、コード内のコメントのとおりですが、カンの良い人であれば、
システムダイアログのウィンドウタイトルが
『Web ページからのメッセージ』ではなく、
『本当に 良いですか?』や『警告』といったウィンドウタイトルだった場合も
応用が効くのではないかと気づくと思います。
結論、応用可能です。
仮にウィンドウタイトルが『本当に 良いですか?』だった場合(あまり無いと思いますが)、
hWindow = FindWindow("#32770", "本当に 良いですか?")
と差し替えてあげれば制御が可能(なはず)です。
オススメ書籍(もっとIEブラウザ連携知りたい人向け)
EXCEL VBAにおけるIEブラウザ連携でオススメする書籍をご紹介します。
この書籍はIEブラウザ連携の逆引きコードとして利用できる稀有な書籍ですので1冊持っておくだけで、
コーディングにおいて かなり効率が良くなります。
今回紹介したソースコードの直接的な説明はありませんが、
ヒントになる情報は十分に有り コードを完成するまでに至りました。
インターネットだけでは分かり得ない体系的な情報も合ったりなど、
ハッキリいってコスパが良いで代物だと思っています。
DOM(Document Object Model)の書籍は数が少ないというものありますが、
良書であることは間違いないため、
DOMで効率化を図りたい人ならば1冊は持っておいて損はしないと思います。
また、IEブラウザ連携は 専門用語が多くわかりにくい分野でもありますので、
もし コーディング効率をあげつつ、専門用語についても学びたいのであれば、
この1冊で一石二鳥ですのでオススメします。
終わりに
いかがでしたでしょうか。
今後もVBA↔IEブラウザ制御については需要があると思いますので、投稿していこうと思います。
また、プログラムの難しさは、独学するにおいて 自分のやりたいことが専門用語で書かれているケースが多く、直感的に調べることができないことだと思っています。
ゆくゆくは『 1から始めるVBA ↔IEブラウザ 連携 講座』もシリーズものとして、なるべくわかりやすい内容のもので投稿しようと考えますので、よろしくお願いいたします。
ちょっとだけ宣伝
プログラミング学習(全般)における間違えない学習方法を理由を含めて説明した記事がございます。
当然 無料ですので、学習方法において不安に感じている方がいらっしゃれば 是非ご覧くださいませ。
少しでも読者の方の役に立てれば良いなと考えておりますので、
重ね重ねになってしまいますが、今後とも本ブログをどうぞよろしくお願いいたします。