質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

11780閲覧

VBA IE制御 別ウインドウでページが開く

chie39

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/11/19 11:03

編集2019/11/19 11:04

御覧下さりありがとうございます。
お力をお借りしたく投稿します。
Win10 / Excel2013 / IE11にてVBAを使用したIE制御をしたいのですが
対象のアドレスを読み込むと自動で別ウインドウで表示されてしまい
その後の操作がオートメーションエラーになってしまいます。
色々調べて何とか動くようにはなったのですが問題もありお力を借りたいです。

初心者の為、説明が至らない点も多いかと思いますがよろしくお願いします。

Set objIE = New InternetExplorerMedium ☆objIE.Visible = True ○objIE.navigate “サイトアドレス”

→通常のサイトだと、☆で開いたウインドウでサイトが開くと思うのですが
該当のアドレスを指定すると☆のウインドウが非表示になり
新たな○のウインドウで対象のページに開いてしまいます。(F8で一つずつ試して確認)
TargetFrameNameを_selfにしても新しいウインドウになりました。
申し訳ないのですがサイトは社内のもののため公開出来ません。
その後の処理は☆のウインドウに対して書いていたので当然処理が出来ず接続切れのオートメーションエラーが出ます。

☆のウインドウを閉じて○のウインドウを認識させる為に以下の処理を入れた所なんとか動きました。

☆のウインドウを閉じる Set objShell = CreateObject("Shell.Application") For Each obj In objShell.Windows If obj.name = "Internet Explorer" Then Set objIE2 = obj objIE2.quit Exit For End If Next ○のウインドウを取得 Set objShell = CreateObject("Shell.Application") For Each obj In objShell.Windows If obj.name = "Internet Explorer" Then Set objIE3 = obj Exit For End If Next

前置きが長くすみません、以下が質問になります。
・この方法だと、不必要なウインドウを全て事前に閉じておかないと正しく機能しません。
・力技でウインドウを制御していますがもっと簡潔な方法はあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

新規ウィンドウのオープンを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操作のコードを書いてみた

投稿2019/11/25 02:02

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問