2012-05-25 45 views
8

想在VBA的範圍內做其他用戶沒有其他的開發工具可以修改。我知道第三方應用程序(例如iMacros),它們做了類似的事情,但希望儘可能通用。車間使用XP和Excel 2003VBA WebBrowser捕獲全屏

(1) VBA子程序被控制的InternetExplorer瀏覽器來自動瀏覽網頁,提交表單等

(2)有沒有辦法讓WebBrowser內容的屏幕截圖?沒有凌亂的SendKeys方法? .NET有一個Webbrowser.DrawToBitmap方法,但找不到VBA的簡單解決方案。希望整個屏幕,其中包括「下面倍」 - 下面的滾動條...

+1

PDF有什麼用處?如果是這樣,你可以打印。 – Fionnuala

+0

是的,它可以使用API​​來完成,但有點複雜。 –

+0

+ 1不錯的問題:) –

回答

10

嘗試和測試(模塊中粘貼完整的代碼和運行子樣品()

代碼邏輯

1)此代碼將打開IE

2)導航到Google.com

3)最大化IE

4)拍攝快照

5)啓動MSPAINT

6)粘貼在MSPAINT

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 cool!只是測試它,它的工作原理如上所述;) –

+0

在我的測試中,不是僅僅獲取網頁 - 也獲取滾動條,但這是一個開始。謝謝。 – 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