2017-08-12 5 views
0

Excelから値を検索して、capscreenを単語ファイルに貼り付けようとしています。検索するアイテムが1つだけの場合は正常に動作します。Googleで項目を検索し、画面をWordに印刷するためのExcel Webのスクラップ

しかし、リストを検索してすべてを単語ファイルに貼り付けることができるのだろうかと思います。

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 
Dim workRng As Range 
Dim searchword As String 

Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = True  
IE.Navigate "www.Google.com"  
Sleep 5000  
IECaption = "Google - Internet Explorer"  
hwnd = FindWindow(vbNullString, IECaption)  
ShowWindow hwnd, SW_SHOWMAXIMIZED 
Sleep 1000 
DoEvents 

私は以下のコードのループを作成しようとしましたが、A1 A2のみを検索するか、まったく動作しないようです。たとえそれがA2を検索することができたとしても、まだスクリーンショットを単語に貼り付けることはできません。

Set workRng = Range("A1:A10") 
For Each searchword in workRng 
IE.Document.All("q") = searchword.Value 
IE.Document.All("btnK").Click 
Sleep 1000 
Call keybd_event(VK_SNAPSHOT, 0, 0, 0) 
Set wordobj = CreateObject("Word.Application") 
Set objDoc = wordobj.Documents.Add 
    wordobj.Visible = True 
Set objSelection = wordobj.Selection 
    objSelection.Paste 
Next searchword 
End Sub 
+0

投稿したコードexmpleのいずれにもループはありません。 "VBAループ"のウェブ検索を行う – jsotola

+0

申し訳ありませんが、私のケースでは動作しませんでしたので投稿しました。今度はループを追加しました – Kinghin245

+0

私のケースでは動作しませんでした。 – jsotola

答えて

0

これがあなたが求めているものであれば100%確信はありません。私はあなたのためのカップルのバグを修正しており、ここに行く:

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 
    Dim IECaption As String 
    Dim workRng As Range 
    Dim searchword 

    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = True 
    IE.navigate "www.Google.com" 
    IEWait (1) 
    Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

    IECaption = "Google - Internet Explorer" 
    hwnd = FindWindow(vbNullString, IECaption) 
    ShowWindow hwnd, SW_SHOWMAXIMIZED 

    IEWait (1) 
    Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

    DoEvents 

    Set workRng = Range("A1:A10") 
    For Each searchword In workRng 
     IE.document.all("q") = searchword.Value 
     IE.document.all("btnK").Click 

     IEWait (1) 
     Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

     Call keybd_event(VK_SNAPSHOT, 0, 0, 0) 
     Set wordobj = CreateObject("Word.Application") 
     Set objDoc = wordobj.Documents.Add 
     wordobj.Visible = True 
     Set objSelection = wordobj.Selection 
     objSelection.Paste 
    Next searchword 

    IE.Quit 
    Set workRng = Nothing 
    Set IE = Nothing 

End Sub 

Function IEWait(t As Long) 

    Do While IE.Busy 
     Application.Wait DateAdd("s", t, Now) 
    Loop 

End Function 

ここにいくつかの説明:

  1. あなたはIECaptionためDim syntaxが欠落しています。
  2. searchwordには、Object型またはVariant型のみを指定できます。
  3. Excelを使用してIEを制御すると、時にはsleepという奇妙な反応が出ることがあります。そのため、Webページを適切な時間に制御するはずのIEWait関数を投げます。
  4. IEを終了して閉じます。これを行う必要がない場合は、これらの行を削除することができます。

希望すると、これが役立ちます。

関連する問題