2012-05-25 37 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