QueryTable.Refresh 会导致不完整的 OLE 操作;如何完成



我正在尝试对这个报告进行自动化,并编写了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:ReportsDaily Origination VolumeDaily Origination Volume.accdb")
    Set db = acApp
    acApp.Run "TableRefresh"
    acApp.Quit
    Set acApp = Nothing
 End Sub

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

我已经从 Excel 连续多次运行 Access 函数并且没有问题,直到我运行查询表刷新。刷新会导致相同的问题。

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

我发现可以通过选择另一种方法来导入数据来缓解问题,即 MS Query。与其选择"从访问"选项来导入数据,不如选择"从其他来源",然后选择"从Microsoft查询"。

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

相关内容

最新更新