2013-11-04 27 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」。

使用這種導入方法後,我多次刷新它背靠背。緊接着刷新之後,我能夠以讀/寫模式打開源數據庫。