Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access Makro aus Excel aufrufen

Begonnen von Diana2017, November 07, 2017, 19:27:03

⏪ vorheriges - nächstes ⏩

Diana2017

Hallo liebes Forum,

ich würde gerne aus Excel heraus meine Accessdatenbank (Access 2016) öffnen, dort ein Makro ausführen und im Anschluss die Datenbank wieder schließen.

Dafür habe ich folgenden VBA Code genommen:

Sub Access_aktualisieren()
Dim accApp As Object
Dim strMDBDatei As String

strMDBDatei = "C:\Users\Diana\Documents\Database1.accdb"


Set accApp = CreateObject("Access.Application")
    accApp.OpenCurrentDatabase strMDBDatei
    accApp.Run "MFillDB"
 
Set accApp = Nothing

End Sub

Er startet gut, jedoch stoppt er bei  accApp.Run "MFillDB" mit der Meldung: "Laufzeitfehler 2517, Prozedur wurde nicht gefunden."

Ich habe schon versucht, dem Makro einen anderen Namen zu geben, doch auch das  bringt nichts.

Hat jemand eine Idee, was der Fehler sein könnte?


steffen0815

Hallo,
prinzipiell sollte es so funktionieren.
Also muss man zunächst davon ausgehen, dass es die Prozedur/Funktion "MFillDB" nicht gibt.

Wichtig:
Prozedur/Funktion <> Makro

Btw:
Prinzipiell würde ich allerdings die Art der Vorgehensweise hinterfragen. Was genau soll der Code in Access tun?
Gruß Steffen

Diana2017

Hallo Steffen,

vielen Dank für Deine Antwort. Ich habe ein Makro gebaut. Dieses ruft mir verschiedene Abfragen auf (Löschabfragen und Anfügeabfragen).

Aufgrund Deines guten Hinweise (danke  :)) habe es jetzt mal als Modul aufgebaut und ebenfalls unter "MFillDB" gespeichert. Es kommt wieder derselbe Fehler. Ich habe es dann mal als "Test" abgespeichert und habe wieder denselben Fehler.

Ich weiß mir langsam nicht mehr zu helfen.... :-\

steffen0815

Hallo,
ein Modul darf nicht wie die Funktion/Prozedur heißen!!

Ein Modul ist im Normalfall ein Container für mehrere Prozeduren.

Benenne Module z.B. grundsätzlich mit einem "mod_" am Anfang.
Gruß Steffen

DF6GL

Hallo,

zusätzlich:

-- benenne das Makro um in "makMFillDB"
-- benutze statt Docmd.Openquery   Currentdb.Execute "Abfragename"
-- entferne  Docmd.Runcommand acCmdClose , Docmd.Quit und Docmd.Setwarnings  ...   
-- schreibe in JEDEN Modulkopf   OPTION EXPLICIT

Diana2017

Hallo Steffen,

ich habe mein Modul nun "mod_FillDB" genannt, die Function heißt nach wie vor "MFillDB". Ich rufe nun "mod_FillDB" auf und bekomme immer noch den Fehler, dass die Prozedur nicht gefunden wurde. Auch wenn ich MFillDB reinschreibe, findet er sie nicht. Sorry, dass ich Dich gleich so beanspruche...

DF6GL

Hallo,

von einem Aufruf des "Moduls" hat keiner geredet.  Wenn die Prozedur MFillDB heißt, dann bleibt es bei
accApp.Run "MFillDB"


siehe auch mein vorangegangenes Posting

steffen0815

Hallo,
ZitatIch rufe nun "mod_FillDB" auf
:(.
Natürlich darfst du nicht das Modul aufrufen, sondern die Prozedur.
Gruß Steffen

Diana2017

Auch das funktioniert leider nicht...  :( er findet es nicht!

@Franz: danke für die Hinweise, ich baue es so ein!

steffen0815

Hallo,
zeig mal bitte deinen aktuellen Stand in der DB.
- schau mal in den Taskmanager, ob noch irgendwelche Accessprozesse laufen
Gruß Steffen

Diana2017

So sieht es bei mir Access aus. Ich habe die Function mit dem Namen "MFillDB". Sorry, ich weiß nicht, wie ich es sonst machen soll.

Diana2017

Hallo Steffen, danke für Deine Geduld  :)
Access ist ganz zu ohne Hintergrundprozesse, wenn ich es aus Excel aus aufrufen möchte....

DF6GL

Hallo,

hast Du alle unsere Vorschläge umgesetzt?   (speziell das Umbenennen des gleichnamigen Makros!)

--schreibe (sicherheitshalber) zusätzlich vor Function noch Public hinzu:

Public Function MFillDB()


und Debuggen/kompiliere die DB im VBA-Editor nach dem Einsetzen von Option Explizit

Diana2017

Hallo Franz,

ja, ich habe das Makro umbenannt, es heißt nun makro_MFillDB.
Ich habe alles so umgesetzt, wie ich es von Dir verstanden habe.

Das Modul im Access funktioniert einwandfrei, wenn ich es dort im Access aufrufe.
Wenn ich den VBA Code aus dem Excel ausführe, bekomme ich die Meldung: Laufzeitfehler 7952, Sie haben einen ungültigen Funktionsaufruf ausgegeben.


DF6GL

Hi,

an welcher Code-Stelle kommt denn der Laufzeitfehler?


setz einen Haltepunkt an den Anfang der Sub und fahre mit F8 den Code durch....