2017-08-25 30 views
0

2つの問題が発生しました。一つは、私はExcelからのテーブル作成クエリをAccessで実行することができない。 「テーブルリスク評価が既に存在します」というエラーメッセージが表示されます。 Excelからテーブル作成クエリを実行する方法が必要です。また、もっと重要なことに、私のコードは非常に不安定に思えます。私がF8を何度も打つことによってそれを実行すると、すべて正常に動作します。ボタンクリックイベントで実行すると、「リモートサーバーマシンが存在しないか利用できません」というエラーが表示されます。 Excelとの通信が失われているようです。それはちょうど推測です。これは私のデスクトップ上にあるので、私は本当にこれはリモートマシンが利用できないとは思わない。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 TABLEまたはSELECT ... 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

ありがとうございました。これは動作するようです! – ryguy72

関連する問題