8

これを VBA の範囲内で実行したいと考えています (他のユーザーは変更する他の開発ツールを持っていません)。同様のことを行うサードパーティのアプリ (iMacros など) を認識していますが、これをできるだけ一般的なものにしたいと考えています。ショップではXPとExcel 2003を使用しています。

(1) VBA サブルーチンが InternetExplorer ブラウザーを制御して、Web サイトの表示、フォームの送信などを自動化します。

(2) WebBrowser のコンテンツからスクリーン キャプチャを取得する方法はありますか? 面倒な SendKeys アプローチなしで? .NET には Webbrowser.DrawToBitmap メソッドがありますが、VBA の簡単な解決策が見つかりません。「スクロールバーの下」を含む画面全体が必要です...

4

2 に答える 2

10

完全なコードをモジュールに貼り付け、Sub Sample() を実行します

コードロジック

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
于 2012-05-25T19:57:50.593 に答える