试图从Excel运行访问查询

试图从Excel运行访问查询

问题描述:

我刚遇到两个问题。首先,我似乎无法在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 

任何想法这里发生了什么?

谢谢!

我会回答我所知道的,但不能复制模糊的不稳定性。

使用.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