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