- 締切済み
VBAでIEで開いたダイアログのオブジェクトの操作
VBAでIE(Edge)上のWebページのエディットボックスやボタンを操作するには、 ie(COMオブジェクト)を取得して、 For Each obj In ie.document.getElementsByTagName("input") If obj.ID = "txtDenpyoNo" Then obj.Value = d_no Exit For End If Next For Each obj In ie.document.getElementsByTagName("input") If obj.ID = "btnSearch" Then obj.Click Exit For End If Next というような感じで、 エディットボックスに値を入れたり取得したり ボタンをクリックしたりする仕方は分かりましたが、 サイト上のボタンをクリックすると、 別のウインドウやダイアログが表示されることがあります。 このような場合、HTMLコードがないため、 上記の方法では記述することができません。 新しいウインドウやダイアログのタイトルから、 IDは取得することはできましたが、この取得したIDで、 ウインドウやダイアログをアクティブにするには、 どのように記述すればよいのでしょうか。 また、ウインドウやダイアログ上のオブジェクトの 指定の仕方がよく分からないのですが、 ウインドウやダイアログ上のオブジェクトを操作するには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。(Windows10,IE,Edge)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
自身(つまりVBAのコード)がブラウザを開けば制御できますが 指摘のように外側で起動されたブラウザを制御するのは困難と思います。 少なくとも私には手に負えません。 そのため、 新たに開くというブラウザ(サイト)が開くのを待つのではなく 自身で開く必要があります。 それが困難であれば これも力技でお勧めしませんが https://officevba.info/mouse_event/ や https://officevba.info/keybdevent/ を参考に、 マウスとキーボードを制御することで実現する必要があるものと思います。
- HohoPapa
- ベストアンサー率65% (455/693)
>ウインドウやダイアログ上のオブジェクトを操作するには、 >どのように記述をすればよいのでしょうか。 それらのウインドウやダイアログ、 あるいは表示しているアプリケーションに依存しますので、 汎用的なVBAのコードで操作することは困難と思います。 少なくとも私には手に負えません。 安定度に不安があり、お勧めしませんが activeにすることさえできれば、 SendKeysステートメントで制御することが可能と思います。 http://officetanaka.net/excel/vba/statement/SendKeys.htm これなどが参考になりましょう。
お礼
回答ありがとうございます。 ダイアログについては、教えて頂きましたSendKeysで 操作することができました。 一方、ウインドウについて、 基本的なことがよく分からないので教えてください。 元のウインドウからボタンをクリックして表示された 新しいウインドウのオブジェクトを操作する場合、 SetForegroundWindow()関数で新しいウインドウをアクティブにして、 新しいウインドウのHTMLの中にある要素を、 ie.document.getElementsByTagName("input")で操作しても、 元のウインドウの要素しか操作できないようなのですが、 新しいウインドウのie(COMオブジェクト)を 取得し直す必要があるのでしょうか。 元のウインドウのie(COMブジェクト)は、 Set ie = CreateObject("InternetExplorer.Application") で取得しましたが、同じ方法で取得しても、 2つ目のIEが起動してしまって新しいウインドウの ie(COMオブジェクト)を取得できません。 このような場合、 どのようにすればよいのか分かりますでしょうか。 よろしくお願いします。
- HohoPapa
- ベストアンサー率65% (455/693)
>新しいウインドウやダイアログのタイトルから、 >IDは取得することはできましたが このIDがウィンドウのハンドルのことであれば、 APIのSetForegroundWindow関数で実現できるだろうと思います。 https://www.vba-ie.net/function/setforegroundwindow.php が参考になります。
お礼
質問の中の表現が正しくありませんでした。 ご指摘の通りIDはウィンドウのハンドルのことです。 教えて頂きました SetForegroundWindow() を使用することで、 ウインドウやダイアログをアクティブすることができました。 質問の前半の部分が解決しました。 ありがとうございました。
お礼
問題は解決していませんが、 ありがとうございました。