使用带标头的vba将sql查询结果导出为ex​​cel

时间:2014-06-18 10:00:30

标签: excel vba

我需要将一个简单的SQL查询结果导出到excel。我能够得到结果,但是标题丢失了,我如何导出标题呢?

这是我到目前为止所做的:

Sub Conn2SQL()

Dim cnn1 As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Set cnn1 = New ADODB.Connection
  cnn1.ConnectionString = "driver={SQL Server};server=MyDBServer;uid=MyuserID;pwd=mypassword;database=MyDB"
  cnn1.ConnectionTimeout = 30
  cnn1.Open  

SQry = "use MyDB select * from TableName"

mrs.Open SQry, cnn1

Sheet2.Range("A2").CopyFromRecordset mrs

mrs.Close
cnn1.Close

End Sub

2 个答案:

答案 0 :(得分:17)

您需要遍历字段名称以包含标头。以下是Microsoft站点的示例:

For iCols = 0 To oRS.Fields.Count - 1
 Sheet(1).Cells(1, iCols + 1).Value = oRS.Fields(iCols).Name
Next

所以要在你的代码中实现,就是这样:

Sub Conn2SQL()

    Dim cnn1 As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
    Dim iCols As Integer

    Set cnn1 = New ADODB.Connection
      cnn1.ConnectionString = "driver={SQL Server};server=MyDBServer;uid=MyuserID;pwd=mypassword;database=MyDB"
      cnn1.ConnectionTimeout = 30
      cnn1.Open

    SQry = "use MyDB select * from TableName"

    mrs.Open SQry, cnn1

    For iCols = 0 To mrs.Fields.Count - 1
        Worksheets("Sheet2").Cells(1, iCols + 1).Value = mrs.Fields(iCols).Name
    Next

    Sheet2.Range("A2").CopyFromRecordset mrs

    mrs.Close
    cnn1.Close

End Sub

答案 1 :(得分:0)

还有另一种方法可以做到这一点。您可以将SQL连接和表数据添加到工作表。 (Excel数据连接向导)

然后使用您的VBA删除该表中的数据,并通过代码插入您的数据(使用VBA创建SQL连接和查询)。

一旦您的代码成功删除数据并将SQL数据重新存储到该表中,您就可以删除创建的连接。

您将获得一个带有列标题的表,现在您的数据将被动态引入并转储到表中。不需要列标题VBA。 :)