仕事で必要になったので忘れないように書いておきます。
サンプルは他のサイトにもたくさんあるので、ひとつの参考にどうぞ。
作成の経緯
例えば、30個のURLをいちいちブラウザに入力して遷移するというのは非常に面倒くさい。
そこで、エクセルに指定したURLを順々に新しいタブで開いていくプログラムを作った。
動作環境
- Windows10
- IE11
- Excel2013
- ExcelVBA
事前準備
1.エクセルシートを作成します。
「Sheet1」シートB7セルから下へURLを入力します(1セルに対し1URL)。
次に、メニュー→「開発」タブ→挿入→ActiveXコントロール→コマンドボタンを選択し、適当なところに設置します。
そのボタンを右クリックし、プロパティを開きます。
「オブジェクト名」「Caption」にそれぞれ「GoToURL」を入力します。
もう一度そのボタンを右クリックし「コードの表示」を選択します。
2.エクセルVBAの参照設定を行う必要があります。
VBAのコード編集画面の「メニュー」→「ツール」→「参照設定」を選択して、
- Microsoft HTML Object Library
- Microsoft Internet Controls
にチェックを入れてください。
コード
以下のコードを入力します。
Private Sub GoToURL_Click()
Dim objIE As InternetExplorer
'IE(InternetExplorer)のオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.Application")
'IE(InternetExplorer)を表示する
objIE.Visible = True
'指定したURLのページを表示する
objIE.Navigate Cells(7, 2).Value
i = 8
Do While Cells(i, 2).Value <> Empty
'完全にページが表示されるまで待機する
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop
'新しいタブで開く(2048はnavOpenInNewTab)
objIE.Navigate2 Cells(i, 2).Value, 2048
i = i + 1
Loop
End Sub
エクセルシート画面まで戻り設置したボタンを押下すると、
自動的にIEが起動し、エクセルで指定したURLのページを表示します。
解説
B7セルに入力されたURLは初期表示のため、新しいタブで開かずそのまま遷移させます。
B8セル以降はセルの値が空でないことを確認し、新しいタブで開いて遷移させています。
個人的にハマったのは、新しいタブを開くためのプロパティが2048だと気づくまでに時間がかかったことです。
(英語のサイトですが、参考になったサイトを載せておきます。)
以上
参考
ExcelVBAなんて普段書かない私みたいな人に
Excel VBA 入門講座
ここのサイトをベースにしました
Navigateメソッドを利用して指定したURLをIEで起動させる
次に参考にさせて頂いたサイト
リンクを新しいタブで開いて操作する
ハマってたら出会えたサイト
Internet Explorer automation not working with IE11