IEShot

VBAでIEの画面キャプチャを撮る関数。
ページが1画面に収まらない場合は、スクロールさせてページ全体を撮っている。

動作確認環境はWindowsXP & Excel2003 & IE8 と Windows7 64bit & Excel2010 & IE10
多分Office2003以降 & IE8以降なら動くんじゃないかな。

2016/05/29追記 IE11で画面の描画が取得できなかったのを対応した。
  ※IE11ではページを表示してるウィンドウのデバイスコンテキストから何故か直接キャプチャできなかったので、デスクトップ全体をキャプチャしてページ部分を切り取るという姑息な手法で実現した。なので環境によっては今までと同じようにキャプチャしていても違ってくる部分はあるかも。

使用上の注意:IEの横スクロールバーが表示されないように十分に横幅を広げてからご利用ください。

関数名:IEShot(IE10まで) IEShot4IE11(IE11用)

IEShot4IE11を使う前に、まずVBAエディタのツールメニューの参照設定で"Microsoft HTML Object Library"をチェックしてください。


パラメータ属性説明
ieObjectInternetExplorerオブジェクト
[ReleaseFixedPosition]BooleanTrueなら"position:fixed"のスタイルを"position:absolute"に変換する。
長いページはスクロールしながら撮るので、fixed表示のノードがスクロール分表示されるのを防ぐため。
全てのスタイルをチェックするため変換には結構時間がかかるので、特定のページだけをキャプチャする場合には、Fixed表示のノードを直接指定するようにソースを修正した方が良いかも。
[FilePath]Stringキャプチャした画像をパラメータで指定したファイルに保存。
形式はBitmapのみ。
指定しなければクリップボードにコピー。

ソース → IEの画面キャプチャ関数 (IEShotModule.bas)


使用例(IEを立ち上げgooのトップページに移動してキャプチャし、"c:\temp\goo.bmp"に保存する。)


Dim ie As Object

Dim sh As Object

    Set ie = CreateObject("InternetExplorer.Application")

    ie.Visible = True

    ie.navigate "http://www.goo.ne.jp"

    While ie.Busy Or ie.readyState <> 4

        DoEvents

    Wend



    '横スクロールバーを表示させないため

    If ie.Width < 1024 Then

        ie.Width = 1024

    End If



    IEShot ie, , "c:\temp\goo.bmp"

    Set ie = Nothing

	

作成された画像 → goo.bmp (9.26MB)


トップページへ戻る