2013-03-11 51 views
0

我目前在MS Access 07上有一個查詢,如下例所示。數據是動態的,所以區域數量每週都會改變。如何基於動態數據創建文件

 ZONE  ERROR 

    ZONE 1 | ERROR 1 
    ZONE 1 | ERROR 3 
    ZONE 2 | ERROR 4 
    ZONE 2 | ERROR 5 
    ZONE 3 | ERROR 1 
    ZONE 3 | ERROR 3 

每個星期,我需要運行此過程爲每週的每個區域創建一個單獨的Excel文件。目前,我在考慮可能需要將數據導入到Excel中,然後使用高級過濾器將每個區域標識爲一個新列 - 獨特區域,然後運行VBA代碼,該代碼將基於唯一區域列中的數據...不知道我是否在正確的路徑上。

回答

0

既然你已經在談論在Excel中使用VBA代碼,你可能不反對在訪問一個VBA解決方案。

比方說,你的表(或查詢)被稱爲[ZoneErrors。您可以在Access中創建類似下面的VBA函數,然後從Access宏調用它:

Public Function ExportZoneErrors() 
Dim cdb As DAO.Database, rst As DAO.Recordset, qdf As DAO.QueryDef, _ 
     excelFileName As String 

Set cdb = CurrentDb 
Set rst = cdb.OpenRecordset("SELECT DISTINCT [ZONE] FROM [ZoneErrors]", dbOpenSnapshot) 
Do While Not rst.EOF 
    On Error Resume Next 
    cdb.QueryDefs.Delete "tmpErrorsForJustOneZone" 
    On Error GoTo 0 
    Set qdf = cdb.CreateQueryDef("tmpErrorsForJustOneZone", _ 
      "SELECT * FROM [ZoneErrors] WHERE [ZONE]='" & rst!ZONE & "'") 
    qdf.Close 
    cdb.QueryDefs.Refresh 

    ' build Excel file name (probably needs to be fancier in production) 
    excelFileName = "Errors for " & rst!ZONE & ".xlsx" ' e.g., "Errors for ZONE 1.xlsx" 

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "tmpErrorsForJustOneZone", excelFileName 

    rst.MoveNext 
Loop 
rst.Close 
Set rst = Nothing 
Set cdb = Nothing 
End Function