0

objElement と objCollection を使用して Web サイトからデータを取得しようとしています。関連する実用的なコードは次のとおりです。

    Sub Step6()
Dim LoanNumX As Long
Dim LastX As String
Dim Phone1X As String
Dim Phone2X As String
Dim PiX As String
Dim TiX As String
Dim myText2 As String

    ActiveWorkbook.Save


    Range("M2").Select


Do While ActiveCell.Value <> ""
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
LastX = ActiveCell.Value
ActiveCell.Offset(, -12).Select
BigX = ActiveCell.Value
Phone1X = "N/A"
Phone2X = "N/A"
PiX = "N/A"
TiX = "N/A"

Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate "https://website.com"

Application.StatusBar = "https://website.com is loading. Please wait..."

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set objCollection = IE.Document.getElementsbyTagName("input")

             A1 = 0
While A1 < objCollection.Length
            If objCollection(A1).Name = "networkId" Then
                    objCollection(A1).Value = "ID"

            Else
            If objCollection(A1).Name = "password" Then
                    objCollection(A1).Value = "PW"

            Else
            If objCollection(A1).Name = "btnLogin" Then
                    Set objElement = objCollection(A1)
                    objElement.Click
            End If
            End If
            End If
            A1 = A1 + 1
Wend

    Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

上記のコードは完全に機能します。以下のコードは上記のコードの直後にあり、問題が発生します。

Application.StatusBar = "Search form submission. Please wait..."


Set objCollection = IE.Document.getElementsbyTagName("input")

    L = 0
While L < objCollection.Length
            If objCollection(L).Name = "account" Then
                    objCollection(L).Value = BigX
          Else
           If objCollection(L).Name = "lastName" Then
                   objCollection(L).Value = LastX

           Else
            If objCollection(L).Type = "image" Then
                   Set objElement = objCollection(L)
                    objElement.Click
            End If
            End If
            End If
            L = L + 1
    Wend

何らかの理由で、上記のコードはスキップされます。理由はわかりませんが、マクロが while ステートメントを通過することはありません。最初から L > objCollection.Length であるかのようです。スクリプトにステップインすると、次からジャンプします。

        While L < objCollection.Length

次のコード セグメントに:

Wend

その結果、IE が開かれ、最初のページがアクセスされ、ログイン データが入力および送信され、結果のページが表示され、IE の別のインスタンスが開かれ、ループが繰り返されます。IE、最初のページ、ログイン データ、結果のページ、IE、最初のページ、ログイン データ、結果のページ、IE... マクロを強制終了すると、多くのインスタンスがすべて同じページにスタックしてしまいます。

いくつかの異なるアプローチを試みましたが、これまでのところ問題を解決できませんでした。

HTMLで求めているデータは次のとおりです。

    <td><input type="text" name="account" maxlength="9" size="25" value="" onkeypress="accountSelected()" class="inputbox"></td>
    <td><input type="text" name="lastName" size="25" value="" onkeypress="lastNameSelected()" class="inputbox"></td>
    <input type="image" src="images/search.gif" alt="Search">

どんな助けでも大歓迎です!また、私は MS Excel 2007 と IE 7 を使用しています。Excel 2007 と IE 7 の両方が古いことはわかっていますが、更新できません。

4

1 に答える 1