|
今度は、CreateObject("InternetExplorer.Application")を使わない方法です。この事例では、Shell.ApplicationのWindowsプロパティを使ってIEオブジェクトの作成を行います。既存のInternet Explorer(タブ)内のタブを操作したいときは、こちらの方がやりやすいかもしれません。
この事例では、最初にShell.ApplicationのWindowsプロパティ内に保存されているIEオブジェクトをカウントします。IEオブジェクトが無い(0個)のときは、Internet Explorerを起動していない状態です。しかし、(Shell.Applicationオブジェクトの)Windows.Item.Navigate2を実行すると、新しいインターネットエクスプローラが開き、指定したページが表示されます。
また、既存のウィンドウがある(カウントした結果が1以上)のときは、最終要素を使ってページを開く操作を行います。このとき、第2引数に指定した内容によって、その後のタブの状態が変わります。
1.navOpenInNewTab(&H800)
新しいタブで開き、さらに新しいタブが最前面に表示される。
2.navOpenInBackgroundTab(&H1000)
新しいタブで開くが、新しいタブは背面(非アクティブ)で開く。
3.第2引数を省略
既存のタブで開く。
なお、IEオブジェクトを取り出す直前に行っているループ処理は、最終要素(=新しいタブ)がIEオブジェクトに変化するまで待機する処理です。Navigate2メソッドを実行してから(Windowsコレクションの最終要素が)IEオブジェクトに変化するまでに若干のタイムラグが発生する場合があるため行っています。
Option Explicit
Const navOpenInNewTab = &H800
Const navOpenInBackgroundTab = &H1000
Dim objIE
Dim objShell
Dim objWindow
Dim lngCount
'Shell.Applicationオブジェクトの作成
Set objShell = CreateObject("Shell.Application")
'IEウィンドウの個数をカウント
lngCount = 0
For Each objWindow In objShell.Windows
lngCount = lngCount + 1
Next
With objShell.Windows
'IEオブジェクトがないときは、新しく作成する
If lngCount = 0 Then
.Item.Navigate2 "http://www.google.co.jp/"
lngCount = lngCount + 1
'IEオブジェクトがあるときは、タブを操作する(新しいタブを作成)
Else
.Item(lngCount - 1).Navigate2 "http://www.google.co.jp/", navOpenInNewTab
'第2引数を省略したときは、lngCountを減算してください
'lngCount = lngCount - 1
End If
'オブジェクトが確定するまでの空ループ
Do Until Not .Item(lngCount) Is Nothing
WScript.Sleep 100
Loop
'IEオブジェクトを取得
Set objIE = .Item(lngCount)
End With
MsgBox "ダイアログを閉じた後、5秒後にIE(タブ)を閉じます。"
WScript.Sleep 5000
'表示しているページの情報を表示
WScript.Echo objIE.LocationURL
WScript.Echo objIE.LocationName
objIE.Quit
Set objIE = Nothing
Set objShell = Nothing
|
※この事例では、既存のタブがある場合は、常に最後のタブを使っています。
|
|
|