VBA / IE选中具有相同名称和不同值的复选框

时间:2016-07-01 18:05:14

标签: vba checkbox io automation

我想检查第一个复选框,但我在VBA中的代码不起作用。

<input type="Checkbox" name="report_filters_product" value="2340">
<input type="Checkbox" name="report_filters_product" value="1338">
<input type="Checkbox" name="report_filters_product" value="2998">
<input type="Checkbox" name="report_filters_product" value="8007">

检查第一个复选框的代码是:

Set Element = objIE.document.getElementsByName("report_filters_product").Value = 2340    
Element.Checked = True

但这不起作用。可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

在聊天中的对话之后,我注意到这段代码出了什么问题。使用第一行代码,您基本上选择了name="report_filters_product"所有元素的数组。如果要更改要检查的第一个复选框,则应首先指定要选择元素的第一个。这可以按如下方式完成:

Set Element = objIE.document.getElementsByName("report_filters_product");
Element[0].Checked = True;

关键部分是[0],它告诉您的脚本只选择第一个复选框。

使用此代码,您不会选中复选框的值,而是选中复选框的索引。如果要选择复选框所具有的值,最简单的解决方案是为每个复选框指定唯一的id属性,然后选择该属性。这样的解决方案看起来像这样:

<input type="Checkbox" name="report_filters_product" value="2340" id="report_2340">
<input type="Checkbox" name="report_filters_product" value="1338" id="report_1338">
<input type="Checkbox" name="report_filters_product" value="2998" id="report_2998">
<input type="Checkbox" name="report_filters_product" value="8007" id="report_8007">

使用脚本然后按ID选择项目,如下所示:

Set Element = objIE.document.getElementById("report_2340");
Element.Checked = True;

请注意,在这种情况下,需要[0],因为getElementById 总是返回单个元素(因为{{1}是文档中的唯一标识符。)