无法将字符串变量传递给VBA中的.getElementById()

时间:2019-09-06 06:14:02

标签: excel vba internet-explorer

因此,我打算循环使用此代码,但我必须先对其进行测试。因此,使用基本的方法:

doc.getElementById("product_basic_product_features_attributes_0_title").Value = ThisWorkbook.Sheets("AEG").Range("E2").Value

我正在将工作表中的值分配给Web表单上的元素ID product_basic_product_features_attributes_0_title 。效果很好。

现在,我想使用包含0的变量,该变量最终应在循环中递增。为了进行测试,我将字符串连接到tempStr变量中以提供 product_basic_product_features_attributes_0_title ,请参见下面的代码。然后将该变量用作getElementbyID()中的参数

Dim tempStr As String
tempStr = "product_basic_product_features_attributes_" & Str(i) & "_title"

doc.getElementById(tempStr).Value = ThisWorkbook.Sheets("AEG").Range("E2").Value

在将变量用作参数的地方出现错误(运行时错误91)

您能帮我什么问题吗? tempStr是一个字符串,应被方法接受。另外,在我的调试中,tempStr的值与我最初使用的元素ID完全相同,但是看起来,出现错误的唯一原因是因为它拒绝在该范围内使用变量。这没有道理。

2 个答案:

答案 0 :(得分:0)

如评论中所述,用于VBA的字符串转换方法是Cstr,尽管对于您的用例来说是最佳实践,但不需要。

doc.getElementById("product_basic_product_features_attributes_" & Cstr(i) & "_title").Value = ThisWorkbook.Sheets("AEG").Range("E2").Value

尽管我怀疑您也想在循环中使用它来更改右侧。

效率较低,但也许值得一提的是,如果您可以仅使用product_basic_product_features_attributes_的起始id属性值来精确匹配所需的元素,则可以收集所有这些id的nodeList,然后在循环(取决于您是否还需要结尾 title 来精确限制)。真的只是一个旁注。

Dim allElements As Object, i As Long

Set allElements = doc.querySelectorAll("[id^='product_basic_product_features_attributes_']")
For i = 0 To allElements.Length - 1
    allElements.Item(i).Value = "something..."
Next

css attribute selectors

答案 1 :(得分:0)

哪个版本的IE以及用于进行此测试的操作系统?

我尝试通过IE 11浏览器测试Windows 7和Windows 10操作系统的问题。

区别是我注意到下面的代码在Windows 7上可以正常工作,但是在Windows 10机器上却给出了错误。我尝试了各种组合,还使用了Cstr(),但对Win 10无效。不仅在这种情况下,在任何情况下都找不到页面上的元素。

经过测试的代码:

yyyy-MM-dd'T'HH:mm:ss.SSSZ

使用IE 11在win 7中输出:

enter image description here

因此,如果您使用的是Windows 10操作系统,则建议不要在其他任何计算机上进行测试以检查结果之间的差异。