我需要从一个web表单下拉列表中选择一个值,这个值是基于我正在编写宏的excel手册中的值,到目前为止,我已经能够导航到网站,并使用下面的vba代码单击所需的选项卡:
Sub FillInternetForm()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "website I'm navigating to"
ie.Visible = True
While ie.Busy
DoEvents 'wait until IE is done loading page.
Wend
Set AllHyperLinks = ie.Document.getElementsByTagName("A")
For Each Hyper_link In AllHyperLinks
If Hyper_link.innerText = "Reconciliations" Then
Hyper_link.Click
Exit For
End If
Next
End Sub
接下来,我需要根据我正在尝试编写宏的工作簿中的预定义值(单元格引用)单击“Preparer”、“Approver”或“Reviewer”。下面是HTML代码,我相信我需要在宏中引用这些代码来执行所描述的操作:
<td class="DashControlTableCellRight"><select name="ctl00$MainContent$ucDashboardPreparer$ucDashboardSettings$ctl00$ddlRoles" class="ControlDropDown" id="ctl00_MainContent_ucDashboardPreparer_ucDashboardSettings_ctl00_ddlRoles" onchange="OnRoleChanged(this);">
<option selected="selected" value="Preparer">Preparer</option>
<option value="Reviewer">Reviewer</option>
<option value="Approver">Approver</option>
</select></td>
1条答案
按热度按时间c0vxltue1#
首先,我想指出单独使用
ie.busy
是危险的。当您自动化网页时,.busy
是非常不可靠的,我建议您在循环中也包含.readyState
属性。请看我使用
.readyState < 4
循环运行的测试:注意到
.Busy
在前5行为true,然后在第6行变为false吗?这是您的代码认为加载网页的位置。然而,.readyState
仍然是1 (相当于READYSTATE_LOADING
)突然又变得忙碌起来,直到
.readystate = 4
(READYSTATE_COMPLETE
)。我将
.busy
方法移到了一个单独的sub中,因为在浏览网页时经常调用这个方法。mySelObj
是将设置选择的对象。