2010-11-16 6 views
8

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

+0

Wollen Sie nicht die Header mit den Daten aufgereiht? Die Daten beginnen in A1, aber Sie scheinen den Headerbereich auf A4 festgelegt zu haben. –

+0

yeah du hast Recht - schlechte Kopie und Paste meinerseits. – firedrawndagger

Antwort

11

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 
+1

Sie müssen die Zelle nicht verwenden, verwenden Sie etwas wie 'Bereich (" A4 "). OffSet (0, x) .value = fld.Name' –

19

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 
+0

Ich mag die" Kürze "Ihrer Lösung. Ich habe es nur etwas erweitert, um die Header auf Bold zu setzen. –

+1

Ich bin verblüfft über die Abwesenheit einer Lösung, die nicht auf eine Schleife zurückgreifen. – mvbentes

6

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 
3

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 ... :)