Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MS Access查询中刷新Excel数据而不破坏引用?_Excel_Ms Access_Vba_Ms Access 2010_Excel 2010 - Fatal编程技术网

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

从MS Access查询中刷新Excel数据而不破坏引用?,excel,ms-access,vba,ms-access-2010,excel-2010,Excel,Ms Access,Vba,Ms Access 2010,Excel 2010,我们有一个Excel工作簿,其中有许多摘要表,所有这些表都引用了我们从MS Access查询中复制和粘贴的核心“数据”选项卡。这些数据通过几个SUMIFS函数、几个数据透视表引用,我们有一个与此选项卡的列相关联的名称,等等 但我们希望定期刷新这些数据,而不会破坏一切。是否有VBA代码可以通过MS Access实现这一点?理想情况下,它会清除数据选项卡的单元格,然后将查询输出粘贴到那里。我最初考虑过transferspreadsheet,但这似乎会一次替换整个表单,并会破坏所有这些引用 是否有“更

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

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


是否有“更安全”的方法将此数据刷新/导出到Excel工作表中?

您的用户是否直接与Excel中的“数据”选项卡交互,还是仅为将数据提供给执行计算和表格等操作的其他选项卡而存在?因为Access(据我所知)在将数据馈送到特定Excel选项卡时并不擅长,但如果您运行OutputTo命令将查询数据馈送到单独的Excel工作表(与当前Excel文件不同的文件名),然后,而不是将当前工作簿选项卡中的所有数据链接到同一工作簿的数据选项卡,将数据链接到Access创建的外部图纸

或者,如果用户确实直接与“数据”选项卡交互,则将“数据”选项卡上的数据链接到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

您的用户是否直接与Excel中的“数据”选项卡交互,或者该选项卡的存在只是为了将数据提供给执行计算和表格等操作的其他选项卡?因为Access(据我所知)在将数据馈送到特定Excel选项卡时并不擅长,但如果您运行OutputTo命令将查询数据馈送到单独的Excel工作表(与当前Excel文件不同的文件名),然后,而不是将当前工作簿选项卡中的所有数据链接到同一工作簿的数据选项卡,将数据链接到Access创建的外部图纸

或者,如果用户确实直接与“数据”选项卡交互,则将“数据”选项卡上的数据链接到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

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

Dim excelApp作为对象
设置excelApp=CreateObject(“Excel.Application”)
excelApp.打开strPathToExcelFile
“excelApp.Workbook(1).工作表(“数据”).UsedRange.ClearContents”可清除现有内容
excelApp.Workbooks(1).工作表(“数据”).单元格(1,1).CopyFromRecordset CurrentDb.QueryDefs(“MyQuery”).OpenRecordset
Excel应用程序工作簿(1)。关闭
退出

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

Dim excelApp作为对象
设置excelApp=CreateObject(“Excel.Application”)
excelApp.打开strPathToExcelFile
“excelApp.Workbook(1).工作表(“数据”).UsedRange.ClearContents”可清除现有内容
excelApp.Workbooks(1).工作表(“数据”).单元格(1,1).CopyFromRecordset CurrentDb.QueryDefs(“MyQuery”).OpenRecordset
Excel应用程序工作簿(1)。关闭
退出

重读问题-您不能删除工作簿-OP有一个包含大量汇总表的Excel工作簿重读问题-您不能删除工作簿-OP有一个包含大量汇总表的Excel工作簿答案很好。OP还可能受益于在每次导出之前清除工作表的一行,以防记录集行数小于最后一个副本。行
“excelApp.Workbooks(1).工作表(“数据”).UsedRange.ClearContents”用于清除现有内容
在取消注释时清除现有内容。完美。非常感谢!回答得很好。OP还可能受益于在每次导出之前清除工作表的一行,以防记录集行数小于最后一个副本。行
“excelApp.Workbooks(1).工作表(“数据”).UsedRange.ClearContents”用于清除现有内容
在取消注释时清除现有内容。完美。非常感谢!