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 代码,该代码将基于Unique Zones 列中的数据...不确定我是否走在正确的道路上。

4

1 回答 1

0

由于您已经在谈论在 Excel 中使用 VBA 代码,因此您可能不会反对 Access 中的 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
于 2013-03-11T15:21:28.013 回答