从SQL查询中将列名拖入Excel中

我正在使用Excel从SQL数据库中提取数据。 我用另一个SO问题的代码,它工作正常。 现在我想从表中除了列表中的列名。 我发现我可以使用For Each fld循环获取名称。 然而,仍然存在这样的问题,即在Excel中将它们横向排成一行,因为列数可能会发生变化 – 所以我想我会需要另一个对于每个循环也是类似的。

Sub GetDataFromADO() 'Declare variables' Set objMyConn = New ADODB.Connection Set objMyCmd = New ADODB.Command Set objMyRecordset = New ADODB.Recordset 'Open Connection' objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;" objMyConn.Open 'Set and Excecute SQL Command' Set objMyCmd.ActiveConnection = objMyConn objMyCmd.CommandText = "select * from myTable" objMyCmd.CommandType = adCmdText objMyCmd.Execute 'Loop Names' ' WHAT TO DO HERE????' 'Open Recordset' Set objMyRecordset.ActiveConnection = objMyConn objMyRecordset.Open objMyCmd 'Copy Data to Excel' ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset) End Sub 

我通常的代码非常相似:

 For intColIndex = 0 To objMyRecordset.Fields.Count - 1 Range("A4").Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name Next 

好,所以在4次尝试之后我就明白了,这里是循环的代码。

  '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 

为了使它超级简单,做这样的事情(使用Sheet1和logging集r)

  For i = 0 To r.Fields.Count - 1 Sheet1.Cells(1, i + 1) = r.Fields(i).Name Next i 

您可以将您的“x”variables设置为0,然后执行如下操作:

 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 

这将使读起来更容易… 🙂