3

我正在尝试自动匹配此报告并编写 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 函数并且没有问题,直到我运行查询表刷新。Refreshall 会导致同样的问题。

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

4

1 回答 1

0

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

使用这种导入方式后,我背靠背刷新了多次。刷新之后,我立即能够以读/写模式打开源数据库。

于 2013-11-07T16:01:33.470 回答