我们有一个Excel工作簿,其中包含大量摘要表,所有这些都引用了我们从MS Access查询中复制和粘贴的核心“数据”选项卡。此数据通过几个SUMIFS函数,几个数据透视表引用,并且我们有一个与此选项卡的列相关联的名称等。
但我们希望定期刷新这些数据,而不会破坏所有内容。是否有可以通过MS Access实现此目的的VBA代码?理想情况下,它会清除数据选项卡的单元格,然后将查询输出粘贴到那里。我最初考虑transferspreadsheet
,但这似乎一次取代整张纸,并会破坏所有这些参考。
是否有一种“更安全”的方式来刷新/导出这些数据到Excel工作表?
答案 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