从MS Access查询刷新Excel数据而不破坏引用?

时间:2018-05-14 14:40:17

标签: excel ms-access access-vba ms-access-2010 excel-2010

我们有一个Excel工作簿,其中包含大量摘要表,所有这些都引用了我们从MS Access查询中复制和粘贴的核心“数据”选项卡。此数据通过几个SUMIFS函数,几个数据透视表引用,并且我们有一个与此选项卡的列相关联的名称等。

但我们希望定期刷新这些数据,而不会破坏所有内容。是否有可以通过MS Access实现此目的的VBA代码?理想情况下,它会清除数据选项卡的单元格,然后将查询输出粘贴到那里。我最初考虑transferspreadsheet,但这似乎一次取代整张纸,并会破坏所有这些参考。

是否有一种“更安全”的方式来刷新/导出这些数据到Excel工作表?

2 个答案:

答案 0 :(得分:2)

您可以使用Range.CopyFromRecordset方法轻松将数据复制到Excel:

Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
excelApp.Open strPathToExcelFile
'excelApp.Workbooks(1).Worksheets("Data").UsedRange.ClearContents 'To clear existing content
excelApp.Workbooks(1).Worksheets("Data").Cells(1,1).CopyFromRecordset CurrentDb.QueryDefs("MyQuery").OpenRecordset
excelApp.Workbooks(1).Close
excelApp.Quit

答案 1 :(得分:0)

您的用户是直接与Excel中的“数据”选项卡进行交互,还是仅为了将数据提供给执行计算和表格的其他选项卡而存在?因为在将数据输入特定的Excel选项卡时Access不是很好(我知道),但是如果运行OutputTo命令将查询数据提供给SEPARATE Excel表(与当前Excel文件不同的文件名),然后,而不是将当前工作簿选项卡中的所有数据链接到同一工作簿的DATA选项卡,而是将数据链接到Access创建的外部工作表。

或者,如果您的用户直接与DATA选项卡进行交互,则将DATA选项卡上的数据链接到Access创建的外部工作表。

示例函数如下:

Function ExportDataAndOpenExcel()

'1: Delete the old Data sheet if it exists 
   If FileExists("C:\User\Desktop\Data.xlsx") Then
      SetAttr "C:\User\Desktop\Data.xlsx", vbNormal
      Kill "C:\User\Desktop\Data.xlsx"
   End If

'2: Export the data in query to Data.xlsx
    DoCmd.OutputTo acOutputQuery, "MyQuery", acFormatXLSX, _ 
          "C:\User\Desktop\Data.xlsx"

'3: Open the Excel sheet with the tabs and calculations on it
    Dim oApp As Object
       Set oApp = CreateObject("Excel.Application")
       oApp.Visible = True
       oApp.workbooks.Open ("C:\User\Desktop\MyWorkbook.xlsx")

End Function