【发布时间】:2020-11-23 00:26:52
【问题描述】:
我是一个真正的初学者,很抱歉语法垃圾。
我正在尝试选择(单击)一个选项(使用“onchange”),但我不能(我在一个多月内尝试了很多东西,但没有任何效果)。我试图将 obj 声明为 iHtmlFormElement / SelectionElement - 没有任何效果。
感谢您的帮助!
到目前为止我的代码:
Sub PL()
Dim DOC As MSHTML.HTMLDocument
Dim IE As InternetExplorer
Dim obj As Object
Set IE = New InternetExplorer
IE.Visible = True
IE.navigate "link"
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set DOC = IE.document
DOC.getElementById("txtUsername").Value = "user"
DOC.getElementById("USMPWD").Value = "pass"
DOC.getElementById("BTNSUB").click
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set DOC = IE.document
Set obj = DOC.getElementsByTagName("listBox")
???here I'm stuck
End Sub
html代码:
<select name="listBox" id="listBox" style="width: 240px;" onchange="javascript:setTimeout('__doPostBack(\'listBox\',\'\')', 0)" size="18">
<option value="1">20</option>
<option value="2">30</option>
<option value="3">50</option>
<option value="5">51</option>
<option value="4">60</option>
</select>
【问题讨论】:
-
应该是
Set obj = DOC.getElementsByTagName("listBox")(0),因为该方法返回一个集合,而不是单个项目。展示您尝试过的一些事情并描述您尝试它们时发生的事情总是很有用的。 -
谢谢。你说得对。我花了几个小时才发布这个消息(作为最后的手段)。我实际上已经尝试过 Set obj = DOC.getElementsByTagName("listBox")(0)。问题是随后出现的选择部分..
-
Set obj = DOC.getElementsByTagName("select")(0)抱歉,我之前错过了标记名部分。或者您可以使用Set obj = DOC.getElementById("listBox")当您引用选择时,您可以设置其selectedIndex以选择特定值。 -
我已经尝试过(obj 标为 HtmlFormElement):
Set obj = DOC.getElementById("listBox")obj.selectedIndex = 1,我得到错误 91 - “对象变量或未设置块变量”在这一行=>obj.selectedIndex = 1 -
没有可用于测试的 URL,我真的无法提出任何其他建议。如果 getElementById 失败,则说明脚本运行时页面上没有具有该 ID 的元素。您可以尝试引入一个短暂的等待,以防在主页完成后动态加载选择。
标签: javascript html vba