Ich habe einen Code, der beim Durchlaufen einwandfrei ausgeführt wird, aber beim Ausführen als Ganzes nicht vollständig ausgeführt wird. Es gibt keine Fehler. Der Code durchsucht HTML-Tags und sucht nach einem Schlüsselwort. Wenn das Schlüsselwort in einer HTML-Zelle gefunden wird, wird die gesamte Zelle in eine Excel-Zelle ausgegeben. Ich suche nach einem Schlüsselwort, das 3 mal auf einer Webseite erscheint. Wenn ich debugge und durchtrete, werden alle 3 Instanzen des Schlüsselworts gefunden, und die Zelle, in der es sich befindet, füllt Zellen A1: C1 in Excel. Wenn der Code jedoch als Ganzes ausgeführt wird, werden nur die ersten beiden Instanzen gefunden. Kann mir jemand sagen, warum das so ist? Meine Vermutung ist, dass die IF-Anweisung aus irgendeinem Grund nicht für das letzte Keyword ausgelöst wird ... Ich werde den HTML-Body und meinen VBA-Code einfügen.HTML-Suchcode wird wie beim Entwerfen ausgeführt, aber nicht vollständig beim vollständigen Ausführen
<HTML>
<HEAD>
<META NAME="name" CONTENT="sldfkjsd">
<TITLE>Title</TITLE>
<P>
<TABLE BORDER=3 CELLPADDING=6 CELLSPACING=3>
<TR>
<TD>
<PRE>
AAAA AAAA AAAA AAA AAA AAAA AAA AAAA AAAA AAA
BBBBb BBBBB BBBBB BBBBB BBBBBBBBBBBBBB B
keyword
CCCCCCCcc CCCCCCCCCC CCCCCCCCCCCC DDDDDDDD
</PRE>
</TD>
</TR>
<TR>
<TD>
<PRE>
AAAA AAAA AAAA AAA AAA AAAA AAA AAAA AAAA AAA
BBBBb BBBBB BBBBB BBBBB BBBBBBBBBBBBBB B
keyword
CCCCCCCcc CCCCCCCCCC CCCCCCCCCCCC DDDDDDDD
</PRE>
</TD>
</TR>
<TR>
<TD>
<PRE>
AAAA AAAA AAAA AAA AAA AAAA AAA AAAA AAAA AAA
BBBBb BBBBB BBBBB BBBBB BBBBBBBBBBBBBB B
keyword
CCCCCCCcc CCCCCCCCCC CCCCCCCCCCCC DDDDDDDD
</PRE>
</TD>
</TR>
<NEXT></NEXT>
</TABLE>
Sub subFindScrollIE()
'Set Variables
Dim boolFound As Boolean
Dim strTemp() As Variant, txt As String
Dim strOutput As String
Dim tbl As HTMLTable, tables As IHTMLElementCollection
Dim tr As HTMLTableRow, r As Integer, i As Integer
Dim tRows As IHTMLElementCollection
Dim ie As InternetExplorer
'Delete Rows and Select A1
Rows("1:100").Delete
ActiveSheet.Range("A1").Select
Set ie = New InternetExplorer
'Show Webpage (optional)
'ie.Visible = True
Dim dateToday As String
'Get Today's date in yyyymmmdd to input into URL for most today's alert page
dateToday = Format((Now), "yyyymmdd")
'Navigate to Desired URL with today's date
ie.Navigate "URL" & dateToday & ".html"
'Input Keywords
strTemp = Array("Keyword")
'Wait for IE page to finish loading
Do Until ie.ReadyState = READYSTATE_COMPLETE Or ie.ReadyState = READYSTATE_INTERACTIVE
'DoEvents
Loop
'Declare rows
Set allrows = ie.Document.body.getElementsByTagName("tr")
' loop through rows
For Each trow In allrows
Set tcell = trow.Cells
' loop through cells
For r = 0 To (tcell.Length - 1)
Set td = tcell(r)
' loop through search text
For i = 0 To UBound(strTemp)
' search row for string
txt = LCase(td.innerHTML)
If (InStr(txt, LCase(strTemp(i))) > 0) Then
Application.PrintCommunication = True
' search string found. create output html table
'strOutput = strOutput & tRows(r).outerHTML & vbCrLf
strOutput = tcell(r).innerHTML
'Output string to new workbook
ActiveCell.Value = strOutput
'Move one cell to the right for next possible match to be pasted
ActiveCell.Offset(0, 1).Select
'Reset string (just in case, not needed)
Debug.Print strOutput
strOutput = ""
End If
Next i
Next r
Next trow
End Sub
Ich denke, einige Ihrer Probleme könnten behoben werden durch [Vermeidung mit '.Select'] (http://StackOverflow.com/Questions/10714251/how-to-avoid-using-select-in-excel-vba- Makros). Wenn es zu "ActiveCell" kommt, ist das * wahrscheinlich * nicht die Zelle, die Sie erwarten. – BruceWayne
Mit Web Scraping, wenn es beim Durchlaufen funktioniert, aber nicht, wenn es geradeaus läuft (ohne Pausen), deutet dies oft auf ein Timing-Problem hin: zusätzlicher Inhalt wird möglicherweise geladen * nachdem * die Seite als "vollständig" gemeldet wird. Versuchen Sie, eine Pause hinzuzufügen, bevor Sie versuchen, auf Inhalte zuzugreifen. –
@TimWilliams Ich habe eine Application.Wait (Now + TimeValue ("0:00:01")) in der ersten Zeile unterhalb der if-Anweisung und immer noch das gleiche Problem. Denkst du, dass es woanders hingehen sollte? –