如何使用 vba 在 IE 的 RadComboBox 下拉列表中自动检查复选框
How to automate checking a CheckBox in RadComboBox dropdown in IE using vba
我正在使用 vba 自动完成网页上的一些搜索参数。我可以访问普通下拉列表的 selection/clicking 和其中的元素,但是这个带有复选框的下拉列表让人有些头疼。
所以我得到了页面,等待加载等。我可以点击下拉菜单,我什至可以点击相关的下拉菜单来显示列表。但是,当我想要 select 此特定列表中的其中一个框时,它会停止。
我已经尝试了很多东西,所以我不能一一列举。但我怀疑如果你知道 HTML 就很容易了,我是新手。
很遗憾,我无法向网站提供 link,因为它是内部网站,但我可以提供一些 html。
因此,当我单击下拉菜单并使用 DOM 资源管理器来识别复选框时,下面是我到达的位置:(是的,我已经将 < 和 > 替换为 | 以获取 html 英寸。抱歉。)
|DIV id=ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown class="RadComboBoxDropDown RadComboBoxDropDown_Web20 " style="WIDTH: 248px; FLOAT: left; DISPLAY: block; TOP: 0px; VISIBILITY: visible" jQuery1111035398745548310944="16"||DIV class="rcbScroll rcbWidth" 风格="HEIGHT: 78px" jQuery1111035398745548310944="9"
|DIV class=rcbCheckAllItems jQuery1111035398745548310944="18"||LABEL||INPUT class=rcbCheckAllItemsCheckBox CHECKED type=checkbox value=""|全选|/LABEL ||/DIV|
|UL class=rcbList style="LIST-STYLE-TYPE: none; ZOOM: 1; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px" jQuery1111035398745548310944="14"|
|LI class=rcbHovered_itemTypeName="Telerik.Web.UI.RadComboBoxItem"||LABEL||INPUT class=rcbCheckBox CHECKED type=checkbox value=""|ERP/Center 详情|/LABEL||/LI|
|LI class=rcbItem_itemTypeName="Telerik.Web.UI.RadComboBoxItem"||LABEL||INPUT class=rcbCheckBox CHECKED type=checkbox value=""|子类别和系列|/标签||/LI||/UL||/DIV||/DIV|
我的代码(或其相关部分):
Dim ie As InternetExplorer
Set ie = New InternetExplorerMedium
Set Doc = CreateObject("htmlfile")
Set Doc = ie.document
Dim SelectByInput As Object
Set SelectByInput = Doc.getElementByID_
("ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown")
'This is OK. but miss part to get to the Checkbox.
请注意,我已尝试 "Doc.getElementsByClassName("rcbCheckAllItemsCheckBox") 但出现运行时错误 438,对象不支持此 属性 或方法。
我预计 SelectByInput.Checked=True 会达成交易,如果
可以直接到达元素 class ="rcbCheckAllItemsCheckBox"(标签 "Check All")或其他两个元素(带有标签 "ERP/Center details" 和 "Sub category and families".
我的解决方案需要确保两个结果中的任何一个是等价的。
1) 选中顶部复选框 (Label "Check All")
2) 其他两个复选框都被选中
谢谢。
尝试以下方法
ie.document.querySelector(".rcbCheckAllItemsCheckBox").click 'N.B. if already checked will uncheck
或
ie.document.querySelector(".rcbCheckAllItemsCheckBox").checked = True
另一种方法是循环输入控件并尝试检查 class 和其他属性。如果匹配则选中复选框。
代码:
Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub demo()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
URL = "C:\Users\Administrator\Desktop.html"
IE.navigate URL
Do While IE.readyState = 4: DoEvents: Loop
Do Until IE.readyState = 4: DoEvents: Loop
HWNDSrc = IE.HWND
SetForegroundWindow HWNDSrc
Set ElementCol = IE.document.getElementsByTagName("input")
For Each btnInput In ElementCol
' Debug.Print btnInput.className
If btnInput.className = "rcbCheckAllItemsCheckBox" Then
btnInput.Checked = True
End If
Next btnInput
'Set IE = Nothing
' Set objElement = Nothing
' Set objCollection = Nothing
End Sub
输出:
我正在使用 vba 自动完成网页上的一些搜索参数。我可以访问普通下拉列表的 selection/clicking 和其中的元素,但是这个带有复选框的下拉列表让人有些头疼。
所以我得到了页面,等待加载等。我可以点击下拉菜单,我什至可以点击相关的下拉菜单来显示列表。但是,当我想要 select 此特定列表中的其中一个框时,它会停止。
我已经尝试了很多东西,所以我不能一一列举。但我怀疑如果你知道 HTML 就很容易了,我是新手。
很遗憾,我无法向网站提供 link,因为它是内部网站,但我可以提供一些 html。
因此,当我单击下拉菜单并使用 DOM 资源管理器来识别复选框时,下面是我到达的位置:(是的,我已经将 < 和 > 替换为 | 以获取 html 英寸。抱歉。)
|DIV id=ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown class="RadComboBoxDropDown RadComboBoxDropDown_Web20 " style="WIDTH: 248px; FLOAT: left; DISPLAY: block; TOP: 0px; VISIBILITY: visible" jQuery1111035398745548310944="16"||DIV class="rcbScroll rcbWidth" 风格="HEIGHT: 78px" jQuery1111035398745548310944="9"
|DIV class=rcbCheckAllItems jQuery1111035398745548310944="18"||LABEL||INPUT class=rcbCheckAllItemsCheckBox CHECKED type=checkbox value=""|全选|/LABEL ||/DIV|
|UL class=rcbList style="LIST-STYLE-TYPE: none; ZOOM: 1; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px" jQuery1111035398745548310944="14"|
|LI class=rcbHovered_itemTypeName="Telerik.Web.UI.RadComboBoxItem"||LABEL||INPUT class=rcbCheckBox CHECKED type=checkbox value=""|ERP/Center 详情|/LABEL||/LI|
|LI class=rcbItem_itemTypeName="Telerik.Web.UI.RadComboBoxItem"||LABEL||INPUT class=rcbCheckBox CHECKED type=checkbox value=""|子类别和系列|/标签||/LI||/UL||/DIV||/DIV|
我的代码(或其相关部分):
Dim ie As InternetExplorer
Set ie = New InternetExplorerMedium
Set Doc = CreateObject("htmlfile")
Set Doc = ie.document
Dim SelectByInput As Object
Set SelectByInput = Doc.getElementByID_
("ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown")
'This is OK. but miss part to get to the Checkbox.
请注意,我已尝试 "Doc.getElementsByClassName("rcbCheckAllItemsCheckBox") 但出现运行时错误 438,对象不支持此 属性 或方法。
我预计 SelectByInput.Checked=True 会达成交易,如果 可以直接到达元素 class ="rcbCheckAllItemsCheckBox"(标签 "Check All")或其他两个元素(带有标签 "ERP/Center details" 和 "Sub category and families".
我的解决方案需要确保两个结果中的任何一个是等价的。 1) 选中顶部复选框 (Label "Check All") 2) 其他两个复选框都被选中
谢谢。
尝试以下方法
ie.document.querySelector(".rcbCheckAllItemsCheckBox").click 'N.B. if already checked will uncheck
或
ie.document.querySelector(".rcbCheckAllItemsCheckBox").checked = True
另一种方法是循环输入控件并尝试检查 class 和其他属性。如果匹配则选中复选框。
代码:
Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub demo()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
URL = "C:\Users\Administrator\Desktop.html"
IE.navigate URL
Do While IE.readyState = 4: DoEvents: Loop
Do Until IE.readyState = 4: DoEvents: Loop
HWNDSrc = IE.HWND
SetForegroundWindow HWNDSrc
Set ElementCol = IE.document.getElementsByTagName("input")
For Each btnInput In ElementCol
' Debug.Print btnInput.className
If btnInput.className = "rcbCheckAllItemsCheckBox" Then
btnInput.Checked = True
End If
Next btnInput
'Set IE = Nothing
' Set objElement = Nothing
' Set objCollection = Nothing
End Sub
输出: