QueryTable.Refresh导致不完整的OLE操作;怎么完成?

时间:2013-11-04 17:31:57

标签: 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函数并没有问题,直到我运行querytable刷新。 Refreshall导致同样的问题。

如何在不更新此OLE操作的情况下仅更新Excel中的查询表?

1 个答案:

答案 0 :(得分:0)

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

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