2017-11-17 4 views
0

Ich bin sicher, das ist streng Benutzerfehler, aber für das Leben von mir kann ich nicht herausfinden, wie eine Tabelle zu iterieren, und schreiben Sie die Datensätze in Excel. Ich habe den folgenden Code, aber es hängt an der ersten Manager ID und wiederholt einfach den Schreibvorgang für diesen ständig in einer Schleife. Ich möchte alle Manager ID in der Tabelle durchlaufen und sie in die gleiche Arbeitsmappe schreiben.Recordset nicht Iterating

Wie soll ich diesen Code optimieren, um dies zu tun?

Set xlR = xlWb.Worksheets(1).Range("$R$2") 
    i=0 
    Set rs2 = Db.OpenRecordset("SELECT * FROM TestTable ORDER BY [Manager ID] ASC", dbOpenDynaset) 
    managerName = CLng(rs2.Fields(3).Value) 
    Debug.Print managerName 
    With rs2 
    .MoveLast 
    .MoveFirst 
    Do While Not .EOF 
     xlR.Value = .Fields(0).Value 
     xlR.Offset(ColumnOffset:=1 + (i * 2)).Value = .Fields(2).Value 
     xlR.Offset(ColumnOffset:=2 + (i * 2)).Value = "ENTATH01" 
     i = i + 1 
     .MoveNext 
    Loop 
    .Close 
    End With 
    xlWb.SaveAs FileName:=sPath & sFile, FileFormat:=xlOpenXMLWorkbook 
    xlWb.Close SaveChanges:=True 
    rs2.MoveNext 
+0

die debug.print Does Alle Managernamen ausgeben? Es sieht für mich so aus, als würden Sie die Zielzelle nicht ändern (Sie verwenden das inkrementierte i nicht überall). Ist es möglich, dass Sie dieselbe Zelle (R2) überschreiben, während Sie über das Recordset TestTable iterieren? – majjam

+0

@majjam - ein debug.print von .Fields (2) .Value .Fields (1) .Value und .Fields (3) .Value zeigt, dass sich das Recordset tatsächlich bewegt. – BellHopByDayAmetuerCoderByNigh

+1

Dies ist die dritte oder vierte Frage dieser Woche Features '.MoveLast' gefolgt von' .MoveFirst' ... habt ihr alle die gleichen beschissenen Tutorials gelesen? Wenn Sie das '.Count' * nicht benötigen, bevor Sie mit der Iteration von * beginnen, brauchen Sie' .MoveLast' und '.MoveFirst' nicht. Wie dem auch sei, das Recordset * iteriert, aber Sie überschreiben dieselben Zellen immer wieder. –

Antwort

3

Sie ändern nicht Ihren Offset, also weisen Sie ständig dieselbe Zelle zu.

Versuchen Sie Folgendes:

xlR.Offset(ColumnOffset:=i * 3).Value 
    xlR.Offset(ColumnOffset:=1+(i*3)).Value = .Fields(2).Value 
    xlR.Offset(ColumnOffset:=2+(i*3)).Value = "ENTATH01" 

Ich nehme an, Sie initialisieren i auf 0

+0

I änderte synatx zu i = 0 xlR.Value = .Felder (0) .Wert xlR.Offset (SpaltenOffset: = 1 + (i * 2)). Wert = .Felder (2) .Wert xlR.Offset (ColumnOffset: = 2 + (i * 2)) Wert = "E00000000" i = i + 1 und es überschreibt nur die gleichen 3 Zellen bei jedem Durchlauf - niemals in die nächste Spalte oder Zeile, wenn der Manager – BellHopByDayAmetuerCoderByNigh

+0

ändert Bewegen Sie bitte 'i = 0' außerhalb der Schleife. –

+0

Ich habe die i = 0 verschoben, um unter dieser Linie zu liegen. Set xlR = xlWb.Worksheets (1) .Range ("$ R $ 2") aber das gleiche Ergebnis – BellHopByDayAmetuerCoderByNigh

0

Wechsel: ¨

i = i + 1 
.MoveNext 

zu

i = i + 2 
.MoveNext