在网站上使用 VBA 到 select 下拉值

Using VBA to select drop-down values on a website

我正在尝试创建一个从网站提取报告的宏,它有四个下拉列表 select 值。 我能够登录该页面并将自己定向到报告页面,但由于某种原因我无法使用下拉列表。我尝试了几个在线提供的 'solutions',但我不断收到错误消息:

Run-time error '438': Object doesn't support this property or method.

这是 select 的下拉列表之一,来自:

<select name="LocationID">
<option value="0" selected="">All Location</option>
<option value="9">Atlanta</option>
<option value="7">Denver</option>
<option value="3">Las Vegas</option>
<option value="1">Los Angeles</option>
<option value="4">Miami</option>
<option value="6">New Jersey</option>
<option value="10">Phoenix</option>
<option value="2">San Francisco</option>
<option value="8">Seattle</option>
<option value="11">Vancouver</option>
</select>

这是我目前在 VBA 中的内容:

Option Explicit
Const MyUserID As String = "test123"
Const MyPassword As String = "test123"
Const READYSTATE_COMPLETE As Integer = 4
Dim objIE As Object


Public Sub LoginScript()

Set objIE = CreateObject("InternetExplorer.Application")

With objIE
.Visible = True
.Silent = True
.navigate ("https://wwww.mywebsite.com")
Do Until .readyState = READYSTATE_COMPLETE
DoEvents
Loop
Application.Wait Now() + TimeValue("00:00:02")
.document.all.txtuserid.Value = MyUserID
.document.all.txtPassword.Value = MyPassword
objIE.document.getElementsByName("btnSubmit")(0).Click
Do Until .readyState = READYSTATE_COMPLETE
DoEvents
Loop
Application.Wait Now() + TimeValue("00:00:02")
.navigate("https://www.mywebsite.com/sample.html")
Do Until .readyState = READYSTATE_COMPLETE
DoEvents
Loop
.document.getElementByName("LocationID").Value = "7"
objIE.document.getElementsByName("view")(0).Click
End With
End Sub

我假设您在这一行收到了错误消息?..

.document.getElementByName("LocationID").Value = "7"

那是因为 Name 是一个元素 collection。与 ID (getElementByID) 不同,元素在 collections.

上是复数

在这种情况下正确的语法是:

.document.getElementsByName("LocationID")(0).Value = "7"

也注意到附加的 (0) 了吗?这是因为它又是 collection,所以您还需要 select collection 项。 (不一定是 (0),但如果不查看整个 HTML 代码,我不能肯定地告诉你。)

应该是这样的……

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

   Set ie = CreateObject("InternetExplorer.Application")
   ie.Visible = True
   ie.navigate "http://www.your_web_site.com"
   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 = "com.db.moap.report.FUBU"

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