Ich verwende Excel, um Daten aus einer SQL-Datenbank zu ziehen. Ich habe den Code von einer anderen SO-Frage verwendet und es funktioniert gut. Jetzt möchte ich die Spaltennamen aus einer Tabelle zusätzlich zur eigentlichen Tabelle ziehen. Ich fand heraus, dass ich die Namen mit der For-Each-Fld-Schleife abrufen konnte. Allerdings gibt es immer noch das Problem, sie horizontal in einer Reihe in Excel zu füllen, da sich die Anzahl der Spalten ändern könnte - also denke ich, dass ich für jede Schleife auch noch eine andere benötigen würde.Ziehen Spaltennamen in Excel von SQL-Abfrage
Antwort
Ok, also habe ich es nach 4 Versuchen herausgefunden, hier ist der Code für die Schleife.
'Loop'
Dim FieldRange As Range
Set FieldRange = Range("A4")
Set TableColumns = Range("A4:H4")
x = 1
Range("A4").Select
For Each fld in objMyRecordset.Fields
ActiveCell.Value = fld.Name
ActiveCell.Offset(0, x).Select
x = x + 1 'tick iterator
Next
ActiveSheet.Range("A5").CopyFromRecordset objMyRecordset
Range("A4").Select
Sie müssen die Zelle nicht verwenden, verwenden Sie etwas wie 'Bereich (" A4 "). OffSet (0, x) .value = fld.Name' –
Mein üblicher Code ist sehr ähnlich:
For intColIndex = 0 To objMyRecordset.Fields.Count - 1
Range("A4").Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name
Next
Ich mag die" Kürze "Ihrer Lösung. Ich habe es nur etwas erweitert, um die Header auf Bold zu setzen. –
Ich bin verblüfft über die Abwesenheit einer Lösung, die nicht auf eine Schleife zurückgreifen. – mvbentes
Um es super einfach zu machen, so etwas wie dies (mit Sheet1 und Cord-r)
For i = 0 To r.Fields.Count - 1
Sheet1.Cells(1, i + 1) = r.Fields(i).Name
Next i
Sie können nur geben Sie Ihr "x" Variable auf 0 und dann etwas tun wie:
x = 0
For Each Field In RS.Fields 'RS being my Recordset variable
Range("A3").Offset(0, x).Value = Field.Name
x = x + 1
Next Field
Und das macht es ein bisschen leichter zu lesen ... :)
Wollen Sie nicht die Header mit den Daten aufgereiht? Die Daten beginnen in A1, aber Sie scheinen den Headerbereich auf A4 festgelegt zu haben. –
yeah du hast Recht - schlechte Kopie und Paste meinerseits. – firedrawndagger