2016-09-26 4 views
0

これは私が見逃していたことかもしれませんが、この問題を1週間以上解決しようとしています。IEテーブルの左の列にある各リンクをループするVBA

左の列の各リンクをクリックしてイントラネットテーブルをループしています。各リンクはデータを収集するサブテーブルを呼び出し、ie.backを使用して最初のテーブルに戻り、次のリンクをクリックします。

これは私がこれまで持っているものである: - intanetサイトから

Sub CycleShiftIDs() 
    Dim Table_Element As MSHTML.IHTMLElementCollection 
    Dim tbl As Object, Click As Object, td As Object 

    For Each tbl In Table_Element 
     If tbl.className = "mytable" Then 
     For Each td In Table_Element.getElementsByTagName("td") 
      If td.innerText = "A" Then 
       Set Click = Table_Element.getElementById("linkOff") 
       Click.Click 
       Do While IE.readyState <> 4: DoEvents: Loop 
       Call GetTableData 
      End If 
     Next 
    Next 
End Sub 

表のデータは、次のようになります -

<TABLE class=mytable> 
<TBODY> 
<TR class=ScreenOnlyDispNone bgColor=silver> 
<TD style="TEXT-ALIGN: center">Shift</TD> 
<TD style="TEXT-ALIGN: center">FullName</TD> 
<TD style="TEXT-ALIGN: center">Assc</TD> 
<TD style="TEXT-ALIGN: center">Date</TD> 
<TD style="TEXT-ALIGN: center">Cases</TD> 
<TD style="TEXT-ALIGN: center">Std</TD> 
<TD style="TEXT-ALIGN: center">Act</TD> 
<TD style="TEXT-ALIGN: center">Perf</TD> 
<TD style="TEXT-ALIGN: center">Dy hh:MM:ss</TD> 
<TD style="TEXT-ALIGN: center">PickRate</TD></TR> 
<TR bgColor=lightblue> 
<TD id=tblShiftData style="WIDTH: 35px"><A onclick="RunRptTot _ 
     '60','S'"id=linkOff href="">60</A></TD> 
<TD id=tblFullNameData style="WIDTH: 130px"></TD> 
<TD id=tblAsscIDData style="WIDTH: 50px"></TD> 
<TD id=tblDateData style="WIDTH: 55px"></TD> 
<TD id=tblCasesData>561788</TD> 
<TD id=tblStdData>128454.98</TD> 
<TD id=tblActData>162753.19</TD> 
<TD id=tblPerfData style="WIDTH: 50px">78.93</TD> 
<TD id=tblhhMMssData style="TEXT-ALIGN: right">113d&nbsp;00:33:11</TD> 
<TD id=tblPickRateData style="WIDTH: 60px">207.11</TD></TR> 
<TR bgColor=lightblue> 
<TD><A onclick="RunRptTot '61','S'" id=linkOff href="">61</A></TD> 
<TD></TD> 
<TD></TD> 
......... 

私が進むべきか上の任意のアイデアを?

次の手順では、私はちょうどこのプロシージャを呼び出すと、最初のテーブルに戻り

Sub GetTableData() 
Application.StatusBar = " Collecting the data on performances" 
Dim i As Integer 
Sheets("Capture").Visible = True 
Sheets("Capture").Select 
Append = Range("A" & Rows.count).End(xlUp).Row 
OffSet1 = 0 
Set TR_Element = htmldoc.getElementsByTagName("TR") 
    For Each HTMLRow In TR_Element 
    Set TD_Element = htmldoc.getElementsByTagName("TR")_ 
          (OffSet1).getElementsByTagName("TD") 
     OffSet2 = 0 
     For Each HTMLCol In TD_Element 
      Cells(Append, 1).Offset(OffSet1, OffSet2).Value = _ 
               HTMLCol.innerText 
      OffSet2 = OffSet2 + 1 
      Cells(Append, 1).Offset(OffSet1, OffSet2).Value = "Picking" 
     Next HTMLCol 
    OffSet1 = OffSet1 + 1 
Next HTMLRow 
IE.GoBack 
Do Until Not IE.Busy And IE.readyState = 4 
    DoEvents 
Loop 
    End Sub 

です。

+0

あなたは何が起こっているのかを教えて、それがあなたが望むものではないことを説明することで素晴らしいスタートを切りますか?あなたはそれが動作していないことを指定していないので、あなたを助けることは非常に困難です... GetTableDataのコードを使用して、そのステップが何をしているかを見ることができます。 – Dave

+0

コードを実行するたびに、私はいくつかの外部プロシージャーを間違って実行しているというエラーメッセージが表示されます。私はこれを何度も書いたことがあり、テーブルをループするためにいくつかの方法を試しました。特定の側面は「linkOff」や「A」のように一定であることがわかります。ボタンをクリックすることはできますが、次の行に移動してもう一度やり直すことはできません。それは私がそれが私が行方不明である単純なものであることを知っているので、イライラしています。 –

答えて

0

別のフォーラムのJohn_wのヘルプでは、問題は解決されています。私は 'Code 70 Permission Denied'を取得し続けましたが、 'Set MyTable'を繰り返すことでこれが解決されたようです。

Sub CycleShfts() 
Dim MyTable As HTMLTable 
Dim r As Integer 
Set htmldoc = IE.document 
Set MyTable = htmldoc.getElementsByTagName("table")(5) 
    For r = 1 To MyTable.Rows.Length - 1 
     Set MyTable = htmldoc.getElementsByTagName("table")(5) 
     MyTable.Rows(r).Cells(0).FirstChild.Click 
      Do While IE.readyState <> 4: DoEvents: Loop 
     Call GetTableData 
    Next 
End Sub 
関連する問題