如何使用 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

输出: