Excel VBAでIEを操作 最小化と最大化
2018/11/04
Excelを自動化すると、自動で最大化や最小化したいといったニーズも出てきます。
今回は、最大化と最小化をする方法を例示したいと思います。
今回のお題は
・Yahoo!Japanを表示
・ウィンドウを最小化(最大化)する
ことです。
上記お題は、以下の操作をすることにより可能となります。
・エクセルを起動
・(バージョンによっては)マクロを有効にする
・マクロの編集画面で、以下のコードをコピー&ペースト
・マクロを実行
前準備
- Visual Basic Editor の画面から「ツール」→「参照設定」を選択します。
- 「Microsoft Internet Controls」と「Microsoft HTML Object Library」にチェックを入れて、OKを押す
最大化する・最小化する
ヒトがieの画面を最小化する場合は以下の操作をします。
- IEを立ち上げる
- URLを入力する
- サイトが表示されるのを待つ
- 最小化する
上記をVBAで表現すると以下のようになります。
実際のコード
Dim objIE As InternetExplorer Dim docIE As HTMLDocument 'ShowWindowを使用する場合のお約束 #If VBA7 Then Private Declare PtrSafe Function ShowWindow Lib "USER32" _ (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Boolean #Else Private Declare Function ShowWindow Lib "USER32" _ (ByVal hwnd As Long, ByVal nCmdShow As Long) As Boolean #End If Sub IE_open() 'Internet Exploreを立ち上げる Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'URLを指定する objIE.Navigate2 "https://www.yahoo.co.jp/" '該当のWebサイトが表示されるのを待つ While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend Dim ret As Long '最大化(コメント化してあります) ' ret = ShowWindow(objIE.hWnd, 3) 最小化 ret = ShowWindow(objIE.hWnd, 2) 'オブジェクト参照を解除 Set docIE = Nothing Set objIE = Nothing End Sub
Yahoo!Japanが表示され、最小化されていませんか?
ではソースの解説です。
表示される箇所は以前説明済みのために、変更点を中心に絞って記載します。
「ShowWindow」APIを使用することを宣言
#If VBA7 Then Private Declare PtrSafe Function ShowWindow Lib "USER32" _ (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Boolean #Else Private Declare Function ShowWindow Lib "USER32" _ (ByVal hwnd As Long, ByVal nCmdShow As Long) As Boolean #End If
最小化、最大化するために「ShowWindow」APIを今回は使用しています。
ExcelのVBAでこのAPIを使用するには、上記宣言が必要となります。
宣言の方法はExcelが64bit版か32bit版で異なります。
そのため、お使いのExcelが64bit版でも332bit版でも対応できるよう、それぞれのパターンの分岐を設けています。
「ShowWindow」使用時のお約束と覚えておいた方がいいでしょう。
最小化する
ret = ShowWindow(objIE.hWnd, 2)
「ShowWindow」のパラメータにはウィンドウのハンドルを指定と、ウィンドウの表示状態が必要です。
ハンドルの値は「objIE.hWnd」で取得できます。
ウィンドウの表示状態の指定は複数のパラメータがありますが、
・最小化の場合は「2」を指定
・最大化の場合は「3」を指定
するとだけ、このサイトでは説明します。
他にも設定が可能ですが、それは他のサイトや書籍に譲ります。
最小化には「CloseWindow」を使用する方法も可能ですが、最大化と最小化のいずれも可能な「ShowWindow」の方がおすすめですので、説明を割愛します。
sendkeyを使用した最大化・最小化
sendkeyを使用した最大化
SendKeys "%(' ')", True Sleep (1000) SendKeys "X", True
最大化のショートカットキーは「Alt + space + X」ですので、これをsendkeyにより入力しています。
お使いの利用環境によってはまだ実行可能な場合もあるようですので、よろしければお試しください。
sendkeyを使用した最小化
SendKeys "%(' ')", True Sleep (1000) SendKeys "N", True
最小化のショートカットキーは「Alt + space + N」ですので、これをsendkeyにより入力しています。
お使いの利用環境によってはまだ実行可能な場合もあるようですので、よろしければお試しください。
「Sleep」APIを使用することを宣言
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If
上記ではsleepで待たせていますので、APIを宣言する必要があります。