2017-08-02 2 views
0

auszuführen Ich versuche, ein Access Macro von Excel auszuführen. Ich habe einen Verweis auf Microsoft Office 14.0 Access-Datenbank-Engine-Objektbibliothek festgelegt. Jetzt versuche ich ein kleines Skript wie dieses zu starten.Versucht, Access-Makro von

Sub RunAccessMacro() 
    Dim strDatabasePath As String 
    Dim PathToDB As String 
    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 

    PathOfDatabase = ThisWorkbook.Worksheets("Updates").Range("PathToAccess") 

    Set db = DAO.DBEngine.OpenDatabase(PathOfDatabase) 
    Set qry = db.Execute("Macro_Run_Key") 

    qry.Close 
    db.Close 

    MsgBox "Done! All processes complete!!" 

End Sub 

Das Problem ist, führen die db.Execute nicht das Makro. Ich sehe nicht einmal etwas wie RunMacro oder wie es heißt.

enter image description here

Es muss ein Weg, dies zu tun, richtig.

Antwort

2

Die Datenbank-Engine nur Datenbank-Dinge (alles mit Tabellen und Abfragen). Wenn Sie mehr als das wollen, müssen Sie die Access-Anwendung durch VBA verwenden müssen:

Sub RunAccessMacro() 
    Dim strDatabasePath As String 
    Dim PathToDB As String 
    Dim accApp As Access.Application 
    Set accApp = New Access.Application 



    PathOfDatabase = ThisWorkbook.Worksheets("Updates").Range("PathToAccess") 
    accApp.OpenCurrentDatabase PathOfDatabase 
    accApp.DoCmd.RunMacro "Macro_Run_Key" 
    accApp.Quit 
    Set accApp = Nothing 


    MsgBox "Done! All processes complete!!" 

End Sub 

Außerdem müssen Sie einen Verweis auf die Microsoft Access-Objektbibliothek hinzufügen, oder können Sie diesen Code anpassen verwenden spät Bindungen.

+0

Danke Scott und danke Erik. Ich habe beide Lösungen ausprobiert, und mit jedem bekomme ich diese Nachricht: Microsoft wartet auf eine andere Anwendung, um eine OLE-Aktion abzuschließen Die Nachricht erscheint nach etwa 4-5 Minuten. Die folgende Codezeile wirft die Dinge ab: .DoCmd.RunMacro Irgendwelche Gedanken? Ich habe ein paar andere Ideen ausprobiert, bevor ich meine Frage gepostet habe. Das Ergebnis ist immer das Gleiche. – ryguy72

+0

Sie haben wahrscheinlich ein Problem mit dem Makro, das eine Benutzerinteraktion erfordert. Haben Sie das Makro mit Set Warnungen auf false geöffnet? Wenn Sie Ihr Makro durch ein einfaches 'Set Warnings False, SQL CREATE TABLE A ausführen 'ersetzen, funktioniert es? –

1

einen Verweis auf die Access-Objektbibliothek Einstellung ist nutzlos , wenn Sie es tatsächlich :) Ernsthaft verwenden, geschrieben den obigen Code verwendet DAO, die als Aufruf Access direkt über das Objekt Libary ein anderes Tier ist. DAO ist streng genommen eine Datenbank-Engine (wie ADO) und kennt keine Makros und Module, wie sie in Office Apps definiert sind.

Hier ist der Code zu verwenden, wenn frühe Bindung mit:

Sub RunAccessMacro() 

    Dim PathOfDatabase As String 
    PathOfDatabase = ThisWorkbook.Worksheets("Updates").Range("PathToAccess") 

    Dim accApp As Access.Application 
    Set accApp = New Access.Application 

    With accApp 

     .OpenCurrentDatabase PathOfDatabase 
     .DoCmd.RunMacro "Macro_Run_Key" 
     .Quit 

    End With 

    MsgBox "Done! All processes complete!!" 

End Sub 
0

Wenn das Makro ein Access-Makro ist, können Sie das Makro mit einem einzigen Befehl tatsächlich auslösen können, anstatt um die Häuser zu gehen. Die/X-Befehlszeilenschalter wird helfen - diesen Link zu überprüfen: How can I schedule a Macro to run automatically in Access 2007

+0

Beachten Sie, dass das Auslösen auf diese Weise zu unerwünschtem Verhalten führt, z. B. dass Access nach dem Beenden des Makros tatsächlich angezeigt wird und nicht beendet wird, sodass keine Fehler mehr erkannt werden können. Während man es "um die Häuser herumgehen" nennen mag, ist es tatsächlich oft mehr Arbeit auf der ganzen Linie. –