【问题标题】:VBA checking multiple html checkboxes on webVBA 检查网络上的多个 html 复选框
【发布时间】:2019-05-06 03:08:22
【问题描述】:

目标是检查多个复选框取决于单元格 J(i) 中用分隔符“|”分隔的数据。

示例:J 列,第 (i) 行 = SkillA|SkillB|SkillC

复选框:勾选/点击这3个技能。

目前我只能通过在单元格 J 中存储 1 个 id 来选择 1 个复选框:

单元格 J = SkillA

Doc.getElementById(sht.Range("J" & i)).Click

完整代码:

    Dim sht As Worksheet
    Set sht = ThisWorkbook.Sheets("Fields")
    Dim LastRow As Long
    Dim i As Long
    LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
    Dim IE As Object
    Dim Doc As HTMLDocument
    Set IE = CreateObject("InternetExplorer.Application")
    '--------------------------------
    For i = 2 To LastRow
    IE.Visible = True
    IE.navigate sht.Range("A" & i).Value
    Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
    Loop
    Set Doc = IE.document
code....
code....
     Doc.getElementById("tab6").Click
     Doc.getElementById(sht.Range("J" & i)).Click

    Next i
    IE.Quit
    MsgBox "Process 100% completed"
    End Sub

【问题讨论】:

    标签: html excel vba forms web-scraping


    【解决方案1】:

    有点令人困惑,但听起来您想使用 split 生成一个值数组,您可以将其作为复选框的 id 值传递

    Dim values() As String, i As Long
    values = Split(sht.Range("J" & i).Value, "|")
    
    For i = LBound(values) To UBound(values)
        On Error Resume Next
        Doc.getElementById(values(i)).Click
        On Error GoTo 0
    Next
    

    【讨论】:

    • 1 件事仍然不完全符合我的意愿 - 我想使用这些值作为名称(SkillA|SkillB|SkillC 等),但在 moemnet 只有 ID 有效(ID1|ID2|ID3) .这里是元素的示例:
    • 您使用的是 getElementById,因此只有有效的 id 才能工作。如果您想要一种用于按名称属性选择的方法,这将部分取决于您拥有多少具有任何给定名称的名称?页面上是否只有一个具有给定名称的属性?
    • 有 337 个唯一 ID,每个 ID 具有唯一名称,未来可能是 500 和 1000 个 ID/名称。
    • 您想根据名称选择一个复选框吗? Doc.querySelector("[name='yourNameValueGoesHere']").click 。试试看。如果不起作用,请发布一个新问题,我会在那里查看。
    • 是的,在元素 "for="chkID1" 之后是一个名称 > SkillA 。如何让它采用 "SkillA" 而不是 "c​​hkID1"? idialy SkillA|SkillB |SkillC 将存储在 J 列中
    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2013-09-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多