2017-05-30 2 views
0

Ich führe diese Sub und es funktioniert, aber die Daten scrapped wird in die zweite Zeile geschrieben und jede Instanz überschreibt die letzte. Ich kann nicht sehen, wo mein Skript falsch ist. Bitte helfen Sie mir zu verstehen:Excel VBA - Warum werden die Daten in derselben Zeile überschrieben?

Option Explicit 

Sub test() 
Dim ele As Object 
Dim objIE As Object 
Dim RowCount As Double 
Dim sht As Worksheet 
Dim myjobtype As String 
Dim myzip As String 
Dim what 
Dim zipcode 

Set sht = Sheets("Sheet1") 
RowCount = 1 
sht.Range("A" & RowCount) = "Title" 
sht.Range("B" & RowCount) = "Company" 
sht.Range("C" & RowCount) = "Location" 
sht.Range("D" & RowCount) = "Description" 

Set objIE = CreateObject("InternetExplorer.Application") 

myjobtype = InputBox("Enter type of job eg. sales, administration") 
myzip = InputBox("Enter zipcode of area where you wish to work") 

With objIE 
.Visible = True 
.navigate "http://www.jobs.com/" 

Do While .Busy Or _ 
.readyState <> 4 
DoEvents 
Loop 

Set what = .document.getElementsByName("q") 
what.Item(0).Value = myjobtype 
Set zipcode = .document.getElementsByName("where") 
zipcode.Item(0).Value = myzip 

.document.forms(0).submit 

Do While .Busy Or _ 
.readyState <> 4 
DoEvents 
Loop 

For Each ele In .document.all 
    Select Case ele.classname 
     Case "cardview" 
      RowCount = RowCount + 1 
     Case "jobTitle" 
      sht.Range("A" & RowCount) = ele.innertext 
     Case "company" 
      sht.Range("B" & RowCount) = ele.innertext 
     Case "location" 
      sht.Range("C" & RowCount) = ele.innertext 
     Case "preview" 
      sht.Range("D" & RowCount) = ele.innertext 
    End Select 
Next ele 
End With 
Set objIE = Nothing 
End Sub 

Antwort

2
RowCount = RowCount + 1 

Sollte außerhalb der Select Case bewegt werden, kurz nach dem For Each.

Dadurch wird eine Zeile für jedes Element inkrementiert, aber Sie haben leere Zeilen für Elemente, die nicht mit jedem Fall übereinstimmen. Wenn Sie diese leeren Zeilen nicht möchten, können Sie einfach die RowCount in der Case Else dekrementieren. Aber eine bessere Lösung ist Ihre Select Aussage simplilfy, da die gleiche Aktion für alle Fälle vorgenommen wird:

For Each ele In .document.all 
    Select Case ele.classname 
    Case "cardview", "jobTitle", "company", "location", "preview" 
     RowCount = RowCount + 1 
     sht.Range("D" & RowCount) = ele.innertext 
    End Select 
Next ele 
+0

Vielen Dank für Ihre Vorschläge, leider bewegte sich RowCount außerhalb des Select Case nicht. Ich ersetzte dann die Select-Anweisung mit Ihrem Vorschlag, aber es legte alles in Spalte D. Wie sollte es die Spalte auf die gleiche Weise erhöhen, wie ich die Zeile erhöhen? – Python

0

Ich bin mir nicht sicher, warum

Case "cardview" 

RowCount = RowCount + 1 

nicht ausgeführt wird.

Aber wenn ich

bewegt
 RowCount = RowCount + 1 

unter Case "jobTitle"

es dann endlich geklappt.

Verwandte Themen