自动下拉选择(使用Excel宏的IE Web应用程序)不起作用?

时间:2016-05-31 12:59:16

标签: html excel vba excel-vba

使用Excel宏在IE上自动填写表单:

我试图从下拉列表中选择一个值(让它称之为DP1),具体取决于此处选择的值(例如,DP1有8个选项并选择第5个选项),将获取数据以进一步下拉形式。

一般行为(当我们使用鼠标点击选择一个值时):

  1. 最初,“选择”这个词是DP1的默认显示,所有进一步的下拉列表都是空白的。
  2. 点击鼠标时,DP1上会显示“ text5 of option5 ”,网页会获取下一个下拉菜单的数据。
  3. 写一个宏来模拟DP1值的选择。

    预期结果:与一般行为相同

    实际结果:

    1. 最初,“select”一词是DP1的默认显示。
    2. 现在,DP1上显示“option5的文本”,但网页没有获取下一个下拉列表的数据。
    3. 根据HTML代码显示DP1的详细信息:

          <select name="name1" Class="tb1" id ="DP1" onchange="javascript:getvalues1()" size="1">
      <option value="0">----Select-------</option>
      <option value="15300">C1</option>
      <option value="15301">C2</option>
      <option value="15302">C3</option>
      <option value="15303">C4</option>
      <option value="15304">C5</option>
      <option value="15304">C6</option>
      <option value="15305">C7</option>
      </select>
      

      我尝试的所有可能的事情:

      1.我尝试更改Drop down的值。这没用。

      set selectobjects = ObjIE.document.getElementsByTagName(select)
      
      For Each Selectele In selectobjects 
       If Selectele.name = "name1" Then
        OptionCount = 0
        For Each Optvalue In Selectele
         OptionCount = Optioncount + 1
         If optioncount = 5 then
          Optvalue.Selected = True
         End If
        Next
        Exit For
       End If
      Next
      

      2.想要使用Sendkeys点击它=它不起作用。

      3.Tried将焦点锁定在元素上并按空格键/左键单击使用发送键,并使用正确的等待时间=不起作用

      4.尝试使用Keybd_event并在将焦点固定在元素上后模拟单击向下箭头=不起作用。

      Private Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfor As Long)
      
          Private Const VK_DOWN = &H28
          Private Const KEYEVENTIF_KEYUP = &H2
      
          Call keybd_event(VK_DOWN, 0,0,0) 'Press down arrow
      
          DoEvents
          Application.WAIT Now+TimeValue("00:00:03") ' application will wait for 3 seconds
      
          Call keybd_event(VK_DOWN,0,KEYEVENTIF_KEYUP,o) 'Release down arrow
          DoEvents
          Application.WAIT Now+TimeValue("00:00:03") ' application will wait for 3 seconds
      

      仅供参考:我使用了所有这些点击和选择多次的方法,并且它们运行良好。但是,只有在这种情况下,我才被击中。

      有些人可以解释为什么当我尝试自动化过程(下拉选择)时这不起作用,当我点击使用鼠标时这同样有效吗?在此先感谢!!

      如果需要进一步的信息,请告诉我们!

1 个答案:

答案 0 :(得分:0)

它应该是这样的。

Sub passValueToComboBox1()
   Dim ie  As Object
   Dim oHTML_Element As IHTMLElement

   Set ie = CreateObject("InternetExplorer.Application")
   ie.Visible = True
   ie.navigate "http://your_URL_here.php"
   While ie.Busy Or ie.readyState <> 4: DoEvents: Wend

   Set oHTML_Element = ie.document.getElementsByName("selectedReportClass")(0)
   If Not oHTML_Element Is Nothing Then oHTML_Element.Value = "FUBU7"

   For Each oHTML_Element In ie.document.getElementsByTagName("input")
      If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
   Next
End Sub

最简单的方法是点击键盘上的F12,这样你就可以看到页面背后的HTML。按名称标识ComboBox(当您将鼠标悬停在HTML代码上时将突出显示)或ID(0,1,2等)。然后,只需将值直接传递给ComboBox。

试一试,看看它是怎么回事。

最后,如果F12没有做任何事情,请下载并安装IE工具栏。

https://www.microsoft.com/en-us/download/details.aspx?id=32987