如何使用Excel VBA在具有动态值的网页中选中复选框?

如何使用Excel VBA在具有动态值的网页中选中复选框?,excel,vba,Excel,Vba,我看过一些教程,内容丰富,很容易理解 我对使用EXCEL VBA单击网站中的复选框表示怀疑 复选框的值将是动态的。这对我来说似乎很有挑战性。如果有人帮我解决这个问题,我会感觉很棒。 我在下面提到了HTML元素供您参考 要求选择合格代码(2015、2018和KD)并删除 Sub Editing_APA_Qualifiers() 模糊的物体 作为HTMLDocument的Dim Doc 设置IE=CreateObject(“InternetExplorer.Application”) 暗淡的外壳对

我看过一些教程,内容丰富,很容易理解

我对使用EXCEL VBA单击网站中的复选框表示怀疑 复选框的值将是动态的。这对我来说似乎很有挑战性。如果有人帮我解决这个问题,我会感觉很棒。 我在下面提到了HTML元素供您参考

要求选择合格代码(2015、2018和KD)并删除

Sub Editing_APA_Qualifiers()
模糊的物体 作为HTMLDocument的Dim Doc 设置IE=CreateObject(“InternetExplorer.Application”) 暗淡的外壳对象 SHELL\u OBJECT=“WScript.SHELL” Set objShell=CreateObject(SHELL\u对象)

可见=真实

'navigate URL

IE.navigate "URL"

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set Doc = IE.document

' Set numrows = number of rows of data.
  NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count

  ' Establish "For" loop to loop "numrows" number of times.
  For intRow = 2 To NumRows

  IE.Visible = True

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Doc.getElementById("txtTimeStudyNbr").Value = ThisWorkbook.Sheets("data").Range("A" & intRow).Value
Doc.getElementById("Search").Click

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Doc.getElementsByName("chkDel").Value = ThisWorkbook.Sheets("data").Range("B" & intRow).Value(0).Click
Doc.getElementsByName("chkDel").Value = ThisWorkbook.Sheets("data").Range("C" & intRow).Value(0).Click
Doc.getElementsByName("chkDel")(7).Click
Doc.getElementById("Delete").Click
objShell.SendKeys "{Enter}"

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Doc.getElementById("lstQualifierTypes").Value = ThisWorkbook.Sheets("data").Range("E1").Value
Doc.getElementById("Search").Click

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Doc.getElementById("lstQualifiers").Value = ThisWorkbook.Sheets("data").Range("E2").Value
Doc.getElementById("ADD").Click
“导航URL”
IE.导航“URL”
在IE.readyState readyState_完成或IE.Busy:DoEvents:Loop时执行
Set Doc=IE.document
'Set numrows=数据行数。
NumRows=Range(“A1”,Range(“A1”).End(xlDown)).Rows.Count
“建立”循环到“numrows”循环的次数。
对于intRow=2到NumRows
可见=真实
在IE.readyState readyState_完成或IE.Busy:DoEvents:Loop时执行
Doc.getElementById(“txtTimeStudyNbr”).Value=ThisWorkbook.Sheets(“数据”).Range(“A”)和intRow.Value
Doc.getElementById(“搜索”)。单击
在IE.readyState readyState_完成或IE.Busy:DoEvents:Loop时执行
Doc.getElementsByName(“chkDel”).Value=ThisWorkbook.Sheets(“数据”).Range(“B”和intRow)。Value(0)。单击
Doc.getElementsByName(“chkDel”).Value=ThisWorkbook.Sheets(“数据”).Range(“C”和intRow)。Value(0)。单击
Doc.getElementsByName(“chkDel”)(7)。单击
Doc.getElementById(“删除”)。单击
objShell.SendKeys“{Enter}”
在IE.readyState readyState_完成或IE.Busy:DoEvents:Loop时执行
Doc.getElementById(“lstQualifierTypes”).Value=ThisWorkbook.Sheets(“数据”).Range(“E1”).Value
Doc.getElementById(“搜索”)。单击
在IE.readyState readyState_完成或IE.Busy:DoEvents:Loop时执行
Doc.getElementById(“lstQualifiers”).Value=ThisWorkbook.Sheets(“数据”).Range(“E2”).Value
Doc.getElementById(“添加”)。单击
下一个

端接头

所以在这里我们可以选择复选框

供您参考

德尔
限定符类型
限定符代码
缩写
印刷品
利润
用户Id
日期
我的
2018
Eff:Ineff:
Y
A.
VKUMARAG
2018年3月6日
我的
2017
Eff:Ineff:
Y
A.
VKUMARAG
2016年5月27日
我的
2016
Eff:Ineff:
Y
A.
无环酶3
2015年11月17日
我的
2015
Eff:Ineff:
Y
A.
阿皮波特
2013年9月20日
及物动词
L
卡车
Y
A.
阿皮波特
2013年9月20日
VL
杜兰特
护林员伊卡
Y
A.
VKUMARAG
2020年4月23日
VL
K#
老流浪者
Y
A.
阿皮波特
2013年9月20日

尝试将css属性=值选择器与contains运算符(*)一起使用。这样,您可以指定要匹配的属性值的静态部分以及节点类型属性

例如


这里我假设
0 | MY | 2018
在目标节点中是静态的。

尝试使用css属性=值选择器和contains运算符(*)。这样,您可以指定要匹配的属性值的静态部分以及节点类型属性

例如


这里我假设
0 | MY | 2018
在目标节点内是静态的。

在每种情况下,这些值和索引都不会变化。在上面的黄色框中,我提到了Excel输入文件的外观,下面的三个场景中我也提到了需求。在第一种情况下,值='0 | MY | 2018',第二种情景='0 | MY | 2017',第三个场景='0 | MY | 2016'。另请参见随附的图片。使用相同的原则选择其他复选框(视情况而定)。我发现很难理解你对这个问题的解释。但是,在进行选择时,它应该仍然可以归结为相同的语法。为了更好地理解,我已经更新了图像。任何人都可以在这方面帮助我。没有这些值和索引将在每种情况下有所不同。在上面的黄色框中,我提到了Excel输入文件的外观,下面的三个场景中我也提到了需求。在第一种情况下,值='0 | MY | 2018',第二种情景='0 | MY | 2017',第三个场景='0 | MY | 2016'。另请参见随附的图片。使用相同的原则选择其他复选框(视情况而定)。我发现很难理解你对这个问题的解释。但是,在进行选择时,它应该仍然可以归结为相同的语法。为了更好地理解,我已经更新了图像。有人能帮我吗。
For your easy reference
<input type="checkbox" name="chkDel" value="0|MY|2018~"></td>
<input type="checkbox" name="chkDel" value="1|MY|2017~"></td>
<input type="checkbox" name="chkDel" value="2|MY|2016~"></td>
<input type="checkbox" name="chkDel" value="3|MY|2015~"></td>
<input type="checkbox" name="chkDel" value="4|VT|L~"></td>
<input type="checkbox" name="chkDel" value="5|VL|KD~"></td>
<input type="checkbox" name="chkDel" value="6|VL|K#~"></td>
ie.document.querySelector("[type=checkbox][value*='0|MY|2018']").click