docmd.TransferSpreadsheet Access - > Excel ////指定目标工作表和范围

时间:2014-02-07 14:44:38

标签: vba ms-access access-vba etl

我必须编写一些Access VBA,将Access查询中的数据导出到包含多个工作表的Excel文档中的特定单元格区域。

我无法找到指定工作表和范围的正确方法。

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

docmd.TransferSpreadsheet(TransferType:=acExport, SpreadsheetType:=acSpreadsheetTypeExcel8, TableName:=qry_Main, _
    FileName:="c:\test.xlsm", _
    HasFieldNames:=False, _
    Range:="Main!J9:J10")

碎片是Range:="Main!J9:J10"

进行此参考的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

您可以使用CopyFromRecordset和自动化:

Sub XLTrans()
''Reference: Microsoft ActiveX Data Object x.x Library
Dim rs As New ADODB.Recordset
Dim xl As Object ''Excel.Application
Dim wb As Object ''Workbook

Set xl = CreateObject("Excel.Application")

''Pick one
''1. New book
Set wb = xl.Workbooks.Add

''2. Existing book
Set wb = xl.Workbooks.Open("z:\docs\book1.xlsx")

''Connection relevant for 2007 or 2010
rs.Open "MyTableOrQuery", CurrentProject.AccessConnection

wb.Sheets("Sheet1").Cells(4, 5).CopyFromRecordset rs

xl.Visible = True

End Sub

请注意,这不包括列标题,但您也可以添加它们,例如:

For i = 0 To rs.Fields.Count - 1
    Worksheets("Sheet1").Cells(3, i + 5) = rs(i).Name
Next

答案 1 :(得分:2)

http://msdn.microsoft.com/en-us/library/office/ff844793.aspx http://msdn.microsoft.com/en-us/library/office/aa141565(v=office.10).aspx

您无法使用RANGE进行导出: “ 范围可选变体。字符串表达式,它是有效的单元格范围或电子表格中范围的名称。此参数仅适用于导入。将此参数留空以导入整个电子表格。 导出到电子表格时,必须将此参数留空。如果输入范围,导出将失败。