2017-08-04 7 views
0

私は、ユーザーが入力した値に対してHTML文書のタグ名の特定のインスタンスをチェックしようとしばらくして、VBAを使用していました。基本的には、HTML文書で、13番目の「label」タグを検索し、Excelの文書内のセルの値と一致するかどうかをチェックします。ここではVBAの一部が...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 

だ私は、コードを実行すると、エラー「を設定していない変数をオブジェクトまたはWithブロック変数が」得続けます。私は、プロモーションオブジェクトの種類を調整しようとしたと同じエラーを取得しようとした、別の基準(クラス名、IDなどで)を使用してプロモーション変数を設定しようとしたと私はエラーを過ぎて得ることができません。あなたがそこに複数の「ラベル」タグがあると私は唯一の移動、その後、特に1と比較する必要が見ることができるようにここで私はそうVBAとそれほど大きくないんだけど...、

<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> 

HTMLのサンプルです私はこれがおそらく非常に単純な修正だと思うが、私はちょうど困っている...任意のヘルプは非常に高く評価されるだろう。ありがとうございました。

答えて

0

getElementsByTagNameはコレクションを返しますが、アイテムで参照を修飾すると1つの要素が返されます。したがって、変数を次のように宣言する必要があります。

Dim promo As IHTMLElement 

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 
関連する問題