使用Excel VBA在IE上按Enter键“按Enter键搜索”

时间:2017-08-03 00:54:40

标签: excel vba web-scraping

我正在处理一个网络表单文本字段,当按下“Enter”时,它将启动对其内容的搜索。

我知道如何启动所有其他事件侦听器,但我无法按下“Enter”事件来触发。它未与其他事件一起列出。即onchange,onclick,onblur

我使用CreateObject(“Shell.Application”)作为Excel VBA中的父对象来控制现有的IE浏览器。

我尝试过sendkeys但是在VBA关注的问题上遇到了麻烦。它在我的IDE或电子表格中输入。

它不是公共网站。它是一个包含事件的输入标签(模糊,变化,焦点,keydown,mousedown,mousemove)。

  With Tex_Box
       .focus
       .keydown
       .innertext = Field_Text
       .change
       .focus
       .blur
   End With

1 个答案:

答案 0 :(得分:0)

所以我发现stackoverflow.com/questions/11655591 / ...描述了在使用Sendkeys之前如何为Internet Explorer提供焦点。然而,"怎么"仅仅是谜题的一部分,另一部分是发现"什么"在程序调用sendkey"〜"(回车)之前需要关注。由于未知数量的sendkey" {TAB}"将光标放在所需的字段上,我创建了一个循环,它将连续遍历所有文本字段,直到部分字符串"焦点"存在于所需文本框的名为classname的属性中。一旦发生这种情况,程序就会有一个标记让它知道调用sendkey"〜。"

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Dim HWNDSrc As Long

text_again:
With DOCK_Tex_Box
    .focus
    .keydown
    .innertext = Field_Text
    .change
    Sleep (500)
    .focus
    .blur
    HWNDSrc = IE.HWND 
   For i = 1 To 100
      DoEvents
      SetForegroundWindow HWNDSrc
      DoEvents
      Application.SendKeys ("{TAB}"), True
      DoEvents
      Sleep 1000
      If InStr(.classname, "prompt") > 0 Then 'If the for loop goes to quickly the field loses focus and then the text clears out.
          DoEvents
          Sleep 500
          GoTo text_again:
      End If

      If InStr(.classname, "focus") > 0 Then 'Text field has focus
        Sleep 1000
        Exit For
      End If
   Next
End With
Application.SendKeys ("~"), True
DoEvents
Sleep 500