2012-05-25 30 views
8

これをVBAの範囲内で行いたいと考えています(他のユーザーには他の開発ツールはありません)。類似しているが、これを可能な限り一般的なものにしたいサードパーティ製のアプリケーション(iMacrosなど)を認識している。ショップでは、使用していますXPおよびExcel 2003VBA WebBrowserフルスクリーンキャプチャ

(1) A VBAサブルーチンは、フォームが提出し、閲覧ウェブサイトを自動化するためのInternetExplorerブラウザを制御しているなど

(2)を取得する方法はありますWebBrowserの内容からのスクリーンキャプチャ?面倒なSendKeysのアプローチなしでは? .NETにはWebbrowser.DrawToBitmapメソッドがありますが、VBAの簡単なソリューションを見つけることはできません。

(モジュール内の完全なコードを貼り付け(サブサンプルを実行します)、スクロールバーの下に...

+1

PDF任意の使用?もしそうなら、印刷することができます。 – Fionnuala

+0

はい、APIを使用して行うことは可能ですが、複雑です。 –

+0

+1 nice Question :) –

答えて

10

は実証済みCODEロジック

- 「折り目の下」を含む、画面全体をしたいです

1)このコードはGoogle.com

にIE

2)ナビゲートを開きますMSPaint 10

3)最大化IE

4)テイクスナップショット

5)起動MSPaint

6)ペースト

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _ 
ByVal dwFlags As Long, ByVal dwExtraInfo As Long) 

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) 

Private Const VK_SNAPSHOT As Byte = 44 

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _ 
lpClassName As String, ByVal lpWindowName As String) As Long 

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal _ 
nCmdShow As Long) As Long 

Private Const SW_SHOWMAXIMIZED = 3 
Private Const VK_LCONTROL As Long = &HA2 
Private Const VK_V = &H56 
Private Const KEYEVENTF_KEYUP = &H2 

Sub Sample() 
    Dim IE As Object 
    Dim hwnd As Long, IECaption As String 

    Set IE = CreateObject("InternetExplorer.Application") 

    IE.Visible = True 

    IE.Navigate "www.Google.com" 

    Sleep 5000 

    '~~> Get the caption of IE 
    IECaption = "Google - Windows Internet Explorer" 

    '~~> Get handle of IE 
    hwnd = FindWindow(vbNullString, IECaption) 

    If hwnd = 0 Then 
     MsgBox "IE Window Not found!" 
     Exit Sub 
    Else 
     '~~> Maximize IE 
     ShowWindow hwnd, SW_SHOWMAXIMIZED 
    End If 

    DoEvents 

    '~~> Take a snapshot 
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0) 

    '~~> Start Paint 
    Shell "C:\Windows\System32\mspaint.exe", vbNormalFocus 

    Sleep 3000 

    '~~> Paste snapshot in paint 
    keybd_event VK_LCONTROL, 0, 0, 0 
    keybd_event VK_V, 0, 0, 0 
    keybd_event VK_V, 0, KEYEVENTF_KEYUP, 0 
    keybd_event VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0 
End Sub 
+0

+1クール!ちょうどそれをテストし、記載されているように動作します;) –

+0

私のテストでは、かなりWebページだけを取得していない - スクロールバーも取得しますが、それはスタートです。ありがとう。 – SteveValarenti

+0

残念ながら、完全な画面のスナップショットが表示されます。これは、IEを最大化した後に 'PRINTSCREEN'を押すのと同じです。 –

2
Dim objIe As Object 
Set objIe = CreateObject("internetexplorer.application") 
    With objIe 
     .Navigate "www.google.com" 
     '// Set offline JIC user NOT Online 
     .offline = True 
     '// Maximise the Ie window if not Already Max 
     .Visible = True 
     '// This routine used to Maximise Ie 
     ShowWindow objIe.hwnd, SW_MAXIMIZE 
     SetForegroundWindow objIe.hwnd 
    End With 

Public Const SW_MAXIMIZE As Long = 3  'Show window Maximised 
Public Const SW_MINIMIZE As Long = 1  'Show window Minimized 

Public Declare Function ShowWindow _ 
    Lib "user32" (_ 
    ByVal hwnd As Long, _ 
    ByVal nCmdShow As Long) _ 
As Long 

Public Declare Function SetForegroundWindow _ 
    Lib "user32" (_ 
    ByVal hwnd As Long) _ 
As Long