質問: obj Exit For End If Next ``` 前置きが長くすみません、以下が質問になります。 ・この方法だと、不必要なウインドウを全て事前に閉じておかないと正しく機能しません。 ・力技でウインドウを制御していますがもっと簡潔な方法はあるのでしょうか?
回答: 新規ウィンドウのオープンをNewWindowイベントでつかまえて自分でブラウザを 指定すれば処理できると思います。 具体的にはたとえば (1)ユーザフォームを作成し、ツールボックスからWebBrowserコントロールを2 つ(仮にWebBrowser1,WebBrower2とします) 配置します (2)WebBrowser1のNewWindow2イベント処理で、 ppDispにWebBrowsr2を 指定します↓ ``` Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean) Set ppDisp = WebBrowser2 End Sub ``` この状態で、WebBrowser1を"サイトアドレス"で開けば、WebBrowser2に 新規ウィンドウのページが開きますので、 あとは、UserForm1.WebBrowser2.Document.~等でアクセスできます。 なお、ナビゲーション時、Webページを画面上に表示する必要がなければ ユーザフォーム自体も表示(.Show)する必要はありません。標準モジュール などから直接UserForm1.WebBrowser1.Navigate(~) 等で操作できます。 また、(1),(2)でユーザフォームやWebBrowserを使うのは、定義が簡単だか らです。 これらを使わずIEオブジェクトにNewWindow2リスナをインプリメントする こともできるようですが、クラスモジュールの定義などが必要で、手間が かかるようです。詳しくはこのあたりを読んでみてください↓ Excelシートに書いたコードでイベントを拾う クラスモジュール に WithEvents で IE操作のコードを書いてみた