【问题标题】:docmd.TransferSpreadsheet Access --> Excel //// specify destination worksheet AND rangedocmd.TransferSpreadsheet Access --> Excel //// 指定目标工作表和范围
【发布时间】:2014-02-08 01:06:46
【问题描述】:

我必须编写一些 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"

进行此引用的正确方法是什么?

【问题讨论】:

    标签: ms-access vba etl


    【解决方案1】:

    您可以使用 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。
    • 如何将 Access 数据传输到现有的 Excel 工作簿中?我有 Excel 文件的路径。您的解决方案似乎创建了一个新的工作簿,这不是我需要做的。
    • 你可以用同样的思路打开一个工作簿。我添加了一条注释。
    【解决方案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 导出: " 范围可选变体。一个字符串表达式,它是有效的单元格区域或电子表格中的区域名称。此参数仅适用于导入。将此参数留空以导入整个电子表格。 导出到电子表格时,必须将此参数留空。如果输入范围,导出将失败。

    "

    【讨论】:

    • 啊,这告诉我,我在阅读 MSDN 时应该花点时间;)+1 指出。
    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多