ここではInternetExplorerやHTMLDocument関連のTipsを紹介します。
userAgent等ブラウザ周りの情報を取得します。
「cpuClass」や「platform」で動作環境(32ビット/64ビット)を判別することもできます。
Public Sub Sample()
With CreateObject("htmlfile")
With .parentWindow.clientInformation
Debug.Print "appCodeName:", .appCodeName
Debug.Print "appMinorVersion:", .appMinorVersion
Debug.Print "appName:", .appName
Debug.Print "appVersion:", .appVersion
Debug.Print "browserLanguage:", .browserLanguage
Debug.Print "cookieEnabled:", .cookieEnabled '警告ダイアログが表示される
Debug.Print "cpuClass:", .cpuClass
Debug.Print "onLine:", .onLine
Debug.Print "platform:", .platform
Debug.Print "systemLanguage:", .systemLanguage
Debug.Print "userAgent:", .userAgent
Debug.Print "userLanguage:", .userLanguage
End With
End With
End Sub
InternetExplorerのイベントを取得します。
「Microsoft HTML Object Library」「Microsoft Internet Controls」要参照。
'※ ThisWorkbook に記述
Private WithEvents IE As SHDocVw.InternetExplorer
Private WithEvents Doc As MSHTML.HTMLDocument
Public Sub Sample()
If Not IE Is Nothing Then Set IE = Nothing
If Not Doc Is Nothing Then Set Doc = Nothing
Set IE = New SHDocVw.InternetExplorer
IE.Visible = True
IE.navigate "about:blank"
End Sub
Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
MsgBox "DocumentComplete", vbInformation + vbSystemModal
Set Doc = IE.document
End Sub
Private Function Doc_onclick() As Boolean
MsgBox "HTMLDocumentをクリックしました。", vbInformation + vbSystemModal
End Function
type属性がfileのinput要素を操作します。
元々のコードは「vbsでフォームに値を入力できない - Visual Basic - 教えて!goo」のKenKen_SPさんが書かれたコードです。
Public Sub Sample()
Const url As String = "http://hogehoge.hoge/up/"
Const path As String = "C:\TEST\Sunset.jpg"
With CreateObject("InternetExplorer.Application")
.Visible = True
.Navigate url
'表示待ち
While .Busy Or .ReadyState <> 4&
DoEvents
Wend
'ファイルパスをクリップボードにコピー
'CreateObject("htmlfile").parentWindow.clipboardData.setData "text", path
With GetObject("new:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
.SetText path
.PutInClipboard
End With
'対象となるinput要素をフォーカスしてファイルパスを貼り付け
.document.getElementsByTagName("input")("upfile").Focus
.ExecWB 13, 0
'"アップロード"ボタンクリック
.document.getElementsByTagName("input")("up").Click
End With
End Sub
Webページ内で文字列検索を行い、ヒットした語句をハイライト表示します。
元々のコードは「971-2 | 再びwebBrowserにて - VB初心者友の会 - Q&A掲示板過去ログ」の魔界の仮面弁士さんが書かれたコードです。
Public Sub Sample()
Const word As String = "リボン" '検索語
With CreateObject("InternetExplorer.Application")
.Visible = True
.Navigate "http://www.google.co.jp/search?hl=ja&q=Office+%E3%83%AA%E3%83%9C%E3%83%B3"
'表示待ち
While .Busy Or .ReadyState <> 4&
DoEvents
Wend
'ヒットした語句の背景を黄色に設定
With .document.body.createTextRange
Do While .findText(word)
.execCommand "BackColor", False, "YELLOW"
.collapse False 'ヒットした語句の末尾にカーソル移動
Loop
End With
End With
End Sub
新しいタブでページを開きます。
Navigate、Navigate2メソッドの引数「Flags」に「navOpenInNewTab(&H800)」を指定します。
「Navigate Method (InternetExplorer, WebBrowser)」「Navigate2 Method (InternetExplorer, WebBrowser)」「BrowserNavConstants Enumeration」参照。
Public Sub Sample()
Const url As String = "http://www.google.co.jp/"
Const url2 As String = "http://www.yahoo.co.jp/"
Const navOpenInNewTab = &H800
With CreateObject("InternetExplorer.Application")
.Visible = True
.Navigate url
'表示待ち
While .Busy Or .ReadyState <> 4&
DoEvents
Wend
'新しいタブで表示
.Navigate2 url2, navOpenInNewTab 'もしくは[.Navigate url2, CLng(navOpenInNewTab)]
End With
End Sub
Webページ上の画像をクリップボードにコピーします。
Public Sub Sample()
Dim elm As Object
Dim r As Object
With CreateObject("InternetExplorer.Application")
.Visible = True
.Navigate "http://www.yahoo.co.jp/"
'表示待ち
While .Busy Or .ReadyState <> 4&
DoEvents
Wend
Set r = .document.body.createControlRange
For Each elm In .document.getElementsByTagName("img")
If elm.getAttribute("alt") = "Yahoo! JAPAN" Then
r.Add elm
r.Select
.ExecWB 12, 0
Exit For
End If
Next
Set r = Nothing
End With
End Sub