2017-08-25 94 views
0

我剛遇到兩個問題。首先,我似乎無法在Excel中運行Access中的表查詢。我收到一條錯誤消息,說'表格風險評級已經存在'。必須有一種方法可以從Excel運行生成表查詢。此外,更重要的是,我的代碼看起來很不穩定。如果我反覆運行F8來運行它,一切正常。如果我通過按鈕單擊事件運行它,會出現以下錯誤:'遠程服務器機器不存在或不可用'。看起來Excel似乎正在失去與Access的溝通。這只是一個猜測。這個東西在我的桌面上,所以我不認爲這個遠程機器不可用。試圖從Excel運行訪問查詢

這是我的代碼。

Sub RunQueriesInAccess() 

Dim AC As Access.Application 

    Set AC = CreateObject("Access.Application") 
    strDatabasePath = ThisWorkbook.Path & "\Database1.accdb" 
    With AC 
     .OpenCurrentDatabase (strDatabasePath) 
     .CurrentDb.Execute "qry_RISK_RATING" 
     .CurrentDb.Execute "qry_Delete_ALLL" 

      Set DB = AC.CurrentDb 
      Set qry = DB.QueryDefs("qry_DATA_HIST") 
      qry.Parameters(0) = Worksheets("Impact Analysis New").Range("B1").Value 
      qry.Execute 

      Set qry = DB.QueryDefs("qry_LIMIT_HIST") 
      qry.Parameters(0) = Worksheets("Impact Analysis New").Range("B1").Value 
      qry.Execute 

     .Quit 
    End With 

ActiveWorkbook.RefreshAll 

End Sub 

任何想法這裏發生了什麼?

謝謝!

回答

1

我會回答我所知道的,但不能複製模糊的不穩定性。

使用.CurrentDb.Execute,可以執行動作查詢,但不能使用CREATE TABLESELECT ... INTO查詢覆蓋表。

使用.DoCmd.SetWarnings False.DoCmd.OpenQuery,但是,您可以。 如果參數化查詢也在創建表,則可以使用.DoCmd.SetParameter

您在代碼段中使用了很多未聲明的變量。我要爲你申報,並使用後期綁定的Access.Application,而不是你到達那裏的早/晚綁定組合。

Sub RunQueriesInAccess() 

    Dim AC As Object 
    Set AC = CreateObject("Access.Application") 
    Dim strDatabasePath As String 
    strDatabasePath = ThisWorkbook.Path & "\Database1.accdb" 

    With AC 
     .OpenCurrentDatabase (strDatabasePath) 
     Dim db As Object 
     Set db = .CurrentDb 
     .DoCmd.SetWarnings False 
     .DoCmd.OpenQuery "qry_RISK_RATING" 
     .DoCmd.OpenQuery "qry_Delete_ALLL" 
     Dim qry As Object 
     Set qry = db.QueryDefs("qry_DATA_HIST") 
     qry.Parameters(0) = Worksheets("Impact Analysis New").Range("B1").Value 
     qry.Execute 

     Set qry = db.QueryDefs("qry_LIMIT_HIST") 
     qry.Parameters(0) = Worksheets("Impact Analysis New").Range("B1").Value 
     qry.Execute 
     .DoCmd.SetWarnings True 
     .Quit 
    End With 
    ActiveWorkbook.RefreshAll 
End Sub 
+0

感謝Erik。這似乎工作! – ryguy72