0

私はそのようなブラウザを作成し、必要なWebページに手動で移動します。別のマクロを介して表示する必要のあるページに到達したら、特定の要素を自動的にプルするつもりです。

Sub Test()


Set CAS = New SHDocVw.InternetExplorer                     ' create a browser
CAS.Visible = True ' make it visible

CAS.navigate "http://intraneturl"

Do Until CAS.readyState = 4
DoEvents
Loop

これはうまくいきます、そして私はします

Public Sub Gather

Set HTMLDoc2 = CAS.document.frames("top").document

Call Timer1

With HTMLDoc2
.getElementById("tab4").FirstChild.Click
End With

Call Timer2


Dim fir, las, add1, add2, cit, stat, zi As String

Dim First As Variant
Dim Last As Variant
Dim addr1 As Variant
Dim addr2 As Variant
Dim city As Variant
Dim Thisstate As Variant
Dim Zip As Variant

Call Timer2

Set HTMLDoc = CAS.document.frames("MainFrame").document

Call Timer2

With HTMLDoc

First = .getElementsByName("IndFirst")
Last = .getElementsByName("IndLast")
addr1 = .getElementsByName("txtAdd_Line1")
addr2 = .getElementsByName("txtAdd_Line2")
city = .getElementsByName("txtAdd_City")
Thisstate = .getElementsByName("cmb_Add_State")
Zip = .getElementsByName("txtAdd_Zip")

End With



fir = First.Value
las = Last.Value
add1 = addr1.Value
add2 = addr2.Value
cit = city.Value
stat = Thisstate.Value
zi = Zip.Value

'navigate back to start page

 With HTMLDoc2
.getElementById("tab3").FirstChild.Click
End With
End Sub

これは最初は機能しますが、最初に、同様の情報を含む別のWebページでgather()サブを再度実行しようとすると、「オブジェクト変数またはブロック変数が設定されていません」というメッセージが表示されます。何が間違っているのかについてのアイデアはありますか?

4

1 に答える 1

0

「オブジェクト変数またはブロック変数が設定されていません」というエラーが発生します:Set HTMLDoc2 = CAS.document.frames( "top")。document 2回目にGather()を実行しようとしました。」

これはおそらく3つのことの1つです。

  1. CASはオブジェクトではなくなりましたこれを確認するには、行にブレークポイントを設定し、VBAエディターでctr + Gを押し?CAS Is Nothingて、イミディエイトウィンドウに入力します。結果はFalseになります。Trueの場合、CASはオブジェクトではなくなります

  2. Daniel Dusekが提案したように、CAS.document.frames( "top")がページ上の実際の要素であることを確認してください。これを確認するには、スクリプトを作成しようとしているWebページを開き、Internet ExplorerでF12キーを押し、ツールバーの矢印をクリックしてWebページの「上部」フレーム要素をクリックし、開発者ツールに戻って行を確認します。強調表示されます。フレーム要素の名前が「top」であることを確認してください。

  3. フレーム要素を参照しようとすると、HTMLが完全に読み込まれていません。より長い遅延またはループを設定します。

すなわち(未テスト):

    Do Until HtmlDoc2 Is Nothing = false
      Set HTMLDoc2 = CAS.document.frames("top").document 
    Loop

おそらくもっと重要な質問は、なぜ手動で別のページに移動するのかということです。プロセスのその部分も自動化できませんか?

于 2012-10-02T21:44:37.880 に答える