2013-08-21 40 views
0

帮助!我有一个数据库用于打开Excel模板,将QueryDef的结果导出到acitve工作表,然后用一个新文件名保存该文件。听起来很简单。我遇到的问题是使用DoCmd.TransferSpreadsheet将结果导出到活动工作表中。除了实际传输数据之外,它完成了我所需要的一切......这意味着它几乎没有用处。任何帮助将不胜感激。我正要把我的头发拉出来。先谢谢你。将QueryDef的结果导出到活动Excel工作表

创建QDF

Set qdf = db.CreateQueryDef("" & strCrt, "SELECT [Zones Asset Information].* FROM " & _ 
"[Zones Asset Information] WHERE [Zones Asset Informaiton].[Invoice Number] " = '" & strCrt & "';") 

打开模板

Set xlWB = xlApp.Workbooks.Open(WB_PATH) 
    Set xlWS = xlWB.Sheets(3) 
    xlWS.Activate 

试图出口

DoCmd.TransferSpreadsheet acExport, 10, "" & strCrt, , True, "orig data" 'Don't know how to specify Active Worksheet instead of a filename?!? 
    DoCmd.DeleteObject acQuery, "" & strCrt 

保存文件

sSaveAsFileName = FLDR_PATH & "Accounting_Breakdown_Zones_Invoice_xxxxxx.xlsx" 
    Debug.Print "sSaveAsFileName: " & sSaveAsFileName 
    xlWB.SaveAs sSaveAsFileName 

回答

1

有从Access数据导出到Excel中的两种方法:

  1. 打开一个msexcel的对象,并使用它的方法使用TransferSpreadsheet方法

你正在做的操纵Excel的

  • 导出数据两者的混合,这就是为什么你没有得到结果。

    TransferSpreadsheet会将给定的查询导出到指定的文件,但不能指定工作表。

    如果指定工作表很重要,那么您必须使用Excel对象来完成此工作,并逐个单元地发送信息,如果证明原因合理,则需要做更多的工作。

  • 0

    E梅特,谢谢你的指导。不得不重新修改现在并未100%赞同帖子标题的流程,但认为我会分享以防其他人需要类似的东西。再次感谢!!

    Private Sub ExportTable_MultipleWB() 
    Dim db As DAO.Database, rs As DAO.Recordset, rs2 As DAO.Recordset, strFilter As String, strFilter2 As String, _ 
        sSaveAsFileName As String 
    
    Dim xlApp As Excel.Application, xlWB As Excel.Workbook, xlWS As Excel.Worksheet 
    Dim bolIsExcelRunning As Boolean 
    
    Set db = CurrentDb 
    Set rs = db.OpenRecordset("SELECT DISTINCT [mytable].[PO Number], [mytable].[Invoice Number] " & _ 
                "FROM [mytable] ORDER BY [mytable].[PO Number], [mytable].[Invoice Number];", dbOpenSnapshot) 
    
    rs.MoveFirst 
    
    Do While Not rs.EOF 
    
    strFilter = rs.Fields(1).Value 
    strFilter2 = rs.Fields(0).Value 
    
    Set rs2 = db.OpenRecordset("SELECT [mytable].* FROM [mytable] WHERE [mytable].[Invoice Number] = '" & strFilter & "';") 
    
    On Error Resume Next 
    
    Set xlApp = GetObject(, "Excel.Application") 
    
    If Err.Number <> 0 Then 
        Set xlApp = CreateObject("Excel.Application") 
    Else 
        bolIsExcelRunning = True 
    End If 
    
    xlApp.Visible = True 
    
    Set xlWB = xlApp.Workbooks.Open(WB_PATH) 
    Set xlWS = xlWB.Sheets(3) 
    
    xlWS.Activate 
    
    With xlWS 
    
    For iCols = 0 To rs2.Fields.Count - 1 
        xlWS.Cells(1, iCols + 1).Value = rs2.Fields(iCols).Name 
    Next 
        xlWS.Range(xlWS.Cells(1, 1), _ 
        xlWS.Cells(1, rs2.Fields.Count)).Font.Bold = True 
        xlWS.Range("A2").CopyFromRecordset rs2 
    End With 
    
    sSaveAsFileName = FLDR_PATH & "myfilename_" & strFilter & "_PO-" & strFilter2 & ".xlsx" 
        Debug.Print "sSaveAsFileName: " & sSaveAsFileName 
    
    xlWB.SaveAs sSaveAsFileName 
    Set xlWS = Nothing 
    
    xlWB.Close False 
    Set xlWB = Nothing 
    
    rs.MoveNext 
    
    Loop 
    
    rs.Close 
    rs2.Close 
    
    If Not bolIsExcelRunning Then 
    xlApp.Quit 
    End If 
    
    Set xlApp = Nothing 
    
    Set rs = Nothing 
    Set rs2 = Nothing 
    
    Set db = Nothing 
    

    结束子

    相关问题