VBA - 无法按标记名称获取元素

时间:2017-08-04 14:09:35

标签: html excel vba excel-vba

我一直在玩一些VBA一段时间,尝试根据用户输入的值检查HTML文档中标记名称的特定实例。基本上,在HTML文档中,我想搜索第13个“标签”标签,并检查它是否与excel doc中的单元格值匹配。这是VBA的一部分......

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

Dim promo As IHTMLElementCollection

Set promo = IE.Document.getElementsByTagName("label")(12)

If InStr(promo.innerText, Range("E5").Value) = 0 Then
    ActiveSheet.Range("D" & i) = "Yes"
Else
    ActiveSheet.Range("D" & i) = "No"
End If

运行代码时,我一直收到“对象变量或未设置块变量”错误。我已经尝试调整促销对象类型并获得相同的错误,尝试使用不同的标准(按类名,按ID等)设置促销变量,我只是无法通过错误。以下是HTML的示例,您可以看到有多个“标签”标签,我只需要与一个标签进行比较然后继续...

    <div id="formHeader">Telephone:</div>
    <div id="formContent">Telephone Type: <br/>
    <label class="formResult">HOME</label> <br/>
    Telephone Consent: <br/>
    <label class="formResult">Y</label><br/>
    Country Code: <br/>
    <label class="formResult">1</label> <br/>
    Telephone: <br/>
    <label class="formResult">555 - 555-5555</label> <br/>
    Extension: <br/>
    <label class="formResult"></label> <br/>
    </div>

我对VBA并不是那么好,所以我想这可能是一个非常简单的修复,但我只是难倒...任何帮助都会非常感激。谢谢。

2 个答案:

答案 0 :(得分:1)

我看到的一些问题包括错误地声明promo而不检查promo是否有效。你能保证你总有13个标签吗?我猜promoNothing然后你引用那个对象的属性。记住这一点,请尝试以下代码:

   Do Until Not IE.Busy And IE.readyState = 4
       DoEvents
   Loop

   Dim promo As IHTMLElement

   Set promo = IE.Document.getElementsByTagName("label")(12)

   If Not promo Is Nothing Then
      If InStr(promo.innerText, Range("E5").Value) = 0 Then
          ActiveSheet.Range("D" & i) = "Yes"
      Else
          ActiveSheet.Range("D" & i) = "No"
      End If
   End If

答案 1 :(得分:0)

虽然getElementsByTagName返回一个集合,但使用item限定引用会返回一个元素。因此,您应该声明您的变量如下...

Dim promo As IHTMLElement

希望这有帮助!