2013-11-04 22 views
3

我试图用这个报告进行交流,并写了VBA执行各种任务,然后我在“RunAll”子目录中依次调用它们。我的数据从Access查询到我的工作簿中的数据透视表中的选项卡。QueryTable.Refresh导致不完整的OLE操作;如何完成?

我发现,当我运行此:

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

End Sub 

它创建与Access的incompelte OLE操作,这会导致访问的只读实例,当我运行下面的打开(“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多次访问功能背靠背并没有问题,直到我运行的QueryTable刷新。 Refreshall导致相同的问题。

如何在Excel中只更新我的查询表,没有离开这个OLE动作不完整?

回答

0

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

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