excel - QueryTable.Refresh 导致 OLE 操作不完整;如何完成?

标签 excel vba ms-access

我正在尝试自动执行此报告,并编写了 VBA 来执行各种任务,然后我在“RunAll”子程序中按顺序调用每个任务。我的工作簿中的数据透视表的选项卡中有来自 Access 查询的数据。

我发现当我运行这个时:

Sub QueryTableRefresh()
    ActiveWorkbook.Sheets("data").Activate
    Range("A2").Activate
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

End Sub

它使用 Access 创建了一个不完整的 OLE 操作,这会导致当我运行以下命令时打开 Access 的只读实例(“TableRefresh”是一个具有删除和追加查询的函数):

Public Sub RefreshAccessTables()

    Dim acApp As Object
    Dim db As Object
    Set acApp = CreateObject("Access.Application")
    acApp.OpenCurrentDatabase ("P:\Reports\Daily Origination Volume\Daily Origination Volume.accdb")
    Set db = acApp
    acApp.Run "TableRefresh"
    acApp.Quit
    Set acApp = Nothing

 End Sub

只读实例会阻止删除和追加查询的写入操作。这不是这两个在我的 RunAll 中运行的顺序,但工作流将要求在进行任何更新时再次运行 RunAll,这会导致冲突。

我已连续多次从 Excel 运行 Access 函数,没有出现任何问题,直到运行查询表刷新。刷新也会导致同样的问题。

如何仅更新 Excel 中的查询表,而不使此 OLE 操作不完整?

最佳答案

我发现选择另一种导入数据的方法(即MS Query)可以缓解这个问题。不要选择“从 Access”选项来导入数据,而是选择“从其他来源”,然后选择“从 Microsoft Query”。

使用这个导入方法后,我连续刷新了多次。刷新后,我立即能够以读/写模式打开源数据库。

关于excel - QueryTable.Refresh 导致 OLE 操作不完整;如何完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773555/

相关文章:

excel - 如果找不到现有工作表,则根据范围创建新工作表

excel - "IF loop not working in EXCEL Macros"

java - 如何在 JExcel (jxl) 中将格式化数字写入数字

excel - 如何根据工作表名称将工作簿拆分为单独的文件?

excel - 在 VBA 记录集的过滤器属性中使用 NOT LIKE

尝试将工作表复制到另一个工作簿时 VBA 返回错误 1004

VBA Office 2010 Outlook 问题

asp.net - 管理员角色和用户角色的配置

ms-access - 设置两个字段主键

ms-access - 使用安全工作组文件编写 Access Access 文件的脚本