如何使用vba在IE中自动检查RadComboBox下拉列表中的CheckBox

时间:2019-04-05 15:23:59

标签: excel vba internet-explorer radcombobox

我正在使用vba自动完成网页上的某些搜索参数。我可以选择/单击常规下拉列表及其中的元素,但是这一带有复选框的下拉列表令人有些头痛。

因此,我得到了页面,等待加载等信息。我可以单击一个下拉列表,甚至可以单击相关的下拉列表以显示列表。但是,当我要选择此特定列表中的一个框时,它会停止。

我尝试了很多东西,所以我不能一一列举。但是我怀疑如果您知道我是新手的HTML,这很容易。

很遗憾,我无法提供该网站的链接,因为它是内部的,但我可以提供一些html。

因此,下面是单击下拉列表并使用DOM Explorer标识复选框的地方:(是的,我用|替换了<和>以获取html。对此感到抱歉。)

| DIV id = ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown class =“ RadComboBoxDropDown RadComboBoxDropDown_Web20” style =“ WIDTH:248px; FLOAT:left; DISPLAY:block; TOP:0px; VISIBILITY:visible” | jQuery111V1016bb;宽度:jQuery111V1516b987455“ “ style =” 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 /中心详细信息| / LABEL || // LI |

| LI class = rcbItem_itemTypeName =“ Telerik.Web.UI.RadComboBoxItem” || LABEL || INPUT class = rcbCheckBox CHECKED type = checkbox value =“” |子类别和族| / LABEL || / 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在达成交易后会达成协议 可以只进入元素类=“ rcbCheckAllItemsCheckBox”(标签为“检查所有”),或者同时进入两个元素类(带有标签“ ERP /中心详细信息”和“子类别和族”。)

我的解决方案需要确保两个相同的结果。 1)选中顶部复选框(标签“全部选中”) 2)同时选中了两个其​​他复选框

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下

ie.document.querySelector(".rcbCheckAllItemsCheckBox").click 'N.B. if already checked will uncheck

ie.document.querySelector(".rcbCheckAllItemsCheckBox").checked = True

答案 1 :(得分:0)

另一种方法是遍历输入控件并尝试检查类和其他属性。如果匹配,则选中复选框。

代码:

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\91.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

输出:

enter image description here