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

我试图用这个报告进行交stream,写了VBA执行各种任务,然后在“RunAll”子目录中依次调用它们。 我有一个数据从Access查询到我的工作簿中的数据透视表中的选项卡。

我发现,当我运行这个:

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

它使用Access创build了一个无效的OLE动作,当我运行下面的命令(“TableRefresh”是一个带有删除和追加查询的函数)时,会导致只读的Access实例打开:

 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中这两个运行的顺序,但是工作stream将需要RunAll将再次运行,如果有任何更新,这将导致冲突。

我已经从Excel多次运行Accessfunction,并没有问题,直到我运行查询表刷新。 Refreshall导致同样的问题。

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

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

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