2017-06-14 1 views
0

Ich teste das folgende Skript.Ich versuche, Tabellenabfrage in Access aus Excel auszuführen

Sub Update_All() 

Dim MyDatabase As DAO.Database 
Dim MyQueryDef As DAO.QueryDef 
Dim MyRecordset As DAO.Recordset 
Dim i As Integer 

'Step 2: Identify the database and query 

PathOfWorkbook = ThisWorkbook.Path 
FullPathOfAccess = PathOfWorkbook & "\TRANSACTIONINFO.accdb" 
Set MyDatabase = DBEngine.OpenDatabase(FullPathOfAccess) 
Set MyQueryDef = MyDatabase.QueryDefs("TRANSBYMONTH") 

With MyQueryDef 
.Parameters("[StartDate]") = Worksheets("Date").Range("B9").Value 
.Parameters("[EndDate]") = Worksheets("Date").Range("B10").Value 
End With 

'Step 4: Open the query 
Set MyRecordset = MyQueryDef.OpenRecordset 

'MyQueryDef.Execute 
MyQueryDef.Close 

aa.DoCmd.SetWarnings WarningsOn:=True 

Set MyDatabase = Nothing 
Set MyQueryDef = Nothing 

' Shut down reference to Access; clean up 
aa.Quit 

' Refresh all links to Access 
ActiveWorkbook.RefreshAll 

End Sub 

Ich erhalte einen Fehler auf dieser Linie:

Set MyRecordset = MyQueryDef.OpenRecordset 

Der Fehler lautet: Laufzeitfehler '3219' Invalid Operation.

Ich denke, eine meiner Referenzen auf ein Objekt wird nicht richtig eingestellt, aber ich weiß wirklich nicht, was das Problem ist.

enter image description here

enter image description here

Ich versuche nur, ein Startdate und EndDate von 2-Zellen in Excel zu greifen und beide zu einer in Access Tabelle erstellen Abfrage übergeben. Wie kann ich das machen?

Danke!

+0

Um Tippfehler Beginnen Sie Ihren Code mit 'Option Explicit' – Luuklag

+1

Können Sie' Debug.Print Worksheets ("Date"). Range ("B10"). Value', zu vermeiden und das Ergebnis geben? Es könnte sich um einen Fehler handeln, der sich auf den Typ dieses Werts bezieht –

Antwort

0

Ich endete damit, die Daten in zwei Parameter einzugeben, die von den 2 Aktionsabfragen kommen, die ich ausführe. Obwohl ich nicht herausfinden konnte, wie man die Parameter von Zellen in einem Worksheet übergibt, funktioniert das Skript unten gut.

Sub Update_All() 

MsgBox ("It may take several minutes for all Queries to finish. Please wait for the 'Done' message to confirm that the task is complete.") 

    Dim strDatabasePath As String 
    Dim oApp As Access.Application 
    Dim PathOfworkbook As String 

    PathOfworkbook = ThisWorkbook.Path 

    strDatabasePath = PathOfworkbook & "\TRANSACTIONS.accdb" 

    Set oApp = CreateObject("Access.Application") 
    oApp.Visible = False 

    oApp.OpenCurrentDatabase strDatabasePath 

    With oApp 
     Application.DisplayAlerts = False 
     '.OpenCurrentDatabase strDatabasePath 

     ' Run first Action Query 
     .DoCmd.OpenQuery "KEY" 

     ' Run second Action Query 
     .DoCmd.OpenQuery "TRBYMONTH" 

     .Quit 
    End With 

    Set appAccess = Nothing 

    MsgBox ("Done! All Access Queries have been updated!!") 

End Sub 
Verwandte Themen