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

我在Visual Studio Express中使用VBA。 我想要做的是给我的Excel的spreedsheet,我已经通过VB,列名,即我有我的数据库中的名称导出一个MS Access数据库创build的第一行。

有10个列9号被跳过,我也已经把spreedsheet放在第一行有标题,我将如何填充我的spreedsheet第一行与我的数据库的列名? 另外,如果直接通过代码分配名称,而不是从数据库传递列标题,那也没关系。

我的代码:

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 

在另一个笔记我将如何在Excel中将字段放在一起,以便所有数据都适合在列中?

谢谢你的帮助,

安迪

在VBA中,有两种将Access表/查询数据导出到Excel电子表格的方法:

1) TransferSpreadsheet方法

该命令将导出所有的字段和logging。 所以,将你的VBAstring保存为一个存储的查询对象,并在下面的命令中引用它:

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

2) CopyFromRecordset方法

该命令将只导出logging。 但是,您可以使用logging集的字段属性填写第一行。 请注意下面的代码假定您使用ADODB连接创build名为rst的ADOlogging集。

 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 

这在Access中工作,我不知道它是否适用于您的情况:

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

您将不得不从oRecords的scheam中检索字段集合:

 oRecords = oCMD.Execute 

或者只是从strSQLparsing字段名称…

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