VBA Excel - 将列名称从 MS Access 保存到电子表格

VBA Excel - Saving column names to spreadsheet from MS Access

我在 Visual Studio Express 中使用 VBA。我想要做的是给出我通过 VB 导出 MS Access DB 创建的 excel 电子表格的第一行,列名,即我在我的数据库中的名称。

有 10 列,第 9 列被跳过,我还 spaced 电子表格以允许第一行有 headers,我将如何填写我的电子表格的第一行与我的数据库的列名? 如果直接通过代码分配名称而不是从数据库传递列 headers 也很好。

我的代码:

Public Sub ExportEx()
    Dim strSQL_Query As String
    Dim oCN As ADODB.Connection
    Dim oCMD As ADODB.Command
    Dim oRecords As ADODB.Recordset
    Dim strDBPath As String
    Dim varValues As Object
    Dim lngRows As Long
    Dim lngCols As Long
    Dim strCN As String



    strDBPath = Application.StartupPath & "\SCO_Leaderboard.accdb"

    strCN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDBPath & ";" & _
                    "Persist Security Info=False;"


    strSQL_Query = "Select top 10 Rank, Username, Time_Played, Lv, EXP, Floor, Col, Logins, Status FROM tblUsers ORDER BY Rank ASC"

    Dim oExcel As Object
    Dim oBook As Object
    Dim oSheet As Object
    oExcel = CreateObject("Excel.Application")
    oBook = oExcel.Workbooks.Add
    oSheet = oBook.Worksheets(1)

    oCN = New ADODB.Connection
    oCN.ConnectionString = strCN
    oCN.Open()


    oCMD = New ADODB.Command
    oCMD.ActiveConnection = oCN
    oCMD.CommandText = strSQL_Query
    oRecords = oCMD.Execute

    varValues = oRecords.GetRows


    lngCols = UBound(varValues, 2)
    lngRows = UBound(varValues, 1)
    oSheet.Range("A2", oSheet.Range("A2").Offset(lngRows, lngCols)) = varValues


    oBook.SaveAs(Application.StartupPath & "\Top_10_All_Time.xls")
    oExcel.Quit()

    MsgBox("An Excel spreadsheet has been created under:" & vbNewLine & vbNewLine & Application.StartupPath & "\Top_10_All_Time.xls")
    '' Clean up...

    oCMD = Nothing
    oCN.Close()
    oCN = Nothing

另外请注意,我如何 space Excel 中的字段,以便所有数据都适合该列?

感谢您的帮助,

安迪

这在 Access 中有效,我不确定它是否适用于您的情况:

Select top 10 Rank As Header1, Username As Header2, Time_Played As Header3 ...

您必须从 oRecords 的架构中检索字段集合:

oRecords = oCMD.Execute

或者只解析来自 strSQL ...

的字段名称

或者 - 非常简单,因为您定义字段名称并从字段名称构建 SQL - 将它们放在一个数组中,然后从该数组构建范围的第一行。

在 VBA 中,有两种方法可以将 Access table/query 数据导出到 Excel 电子表格:

1) TransferSpreadsheet 方法

此命令将导出所有字段和记录。因此,将 VBA 字符串保存为存储的查询对象并在以下命令中引用它:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
               "yourtableorqueryname", "fullpathtoExcelFile", True

2) CopyFromRecordset 方法

此命令将仅导出记录。但是,您可以使用记录集的 Fields 属性 来填充第一行。请注意下面的代码假设您使用 ADODB 连接创建了一个名为 rst 的 ADO 记录集。

Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset

rst = "Select top 10 Rank, Username, Time_Played, Lv, EXP, Floor, Col, Logins, Status" _
  & " FROM tblUsers ORDER BY Rank ASC", oCN

oSheet.Range("A1").Select
For Each fld In rst.Fields
   oExcel.ActiveCell = fld.Name
   oExcel.ActiveCell.Offset(0, 1).Select
Next
'REMOVE BELOW IF YOU WANT ONLY COLUMN HEADERS NOT DATA
oSheet.Range("A2").CopyFromRecordset rst
'TO AUTO FIT (SPACE OUT) COLUMNS
osheet.Range("A1:I" & rst.RecordCount + 1).Columns.AutoFit