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?
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?
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.... :-\
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.
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
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...
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
Hallo,
ZitatIch rufe nun "mod_FillDB" auf
:(.
Natürlich darfst du nicht das Modul aufrufen, sondern die Prozedur.
Auch das funktioniert leider nicht... :( er findet es nicht!
@Franz: danke für die Hinweise, ich baue es so ein!
Hallo,
zeig mal bitte deinen aktuellen Stand in der DB.
- schau mal in den Taskmanager, ob noch irgendwelche Accessprozesse laufen
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.
Hallo Steffen, danke für Deine Geduld :)
Access ist ganz zu ohne Hintergrundprozesse, wenn ich es aus Excel aus aufrufen möchte....
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
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.
Hi,
an welcher Code-Stelle kommt denn der Laufzeitfehler?
setz einen Haltepunkt an den Anfang der Sub und fahre mit F8 den Code durch....
Er kommt wieder bei
accApp.Run "MFillDB"
Hi,
na gut, kannst Du die beiden DBs hier hochladen (datenreduziert, komprimiert/repariert und gezippt) ?
Hallo,
ZitatDas Modul im Access funktioniert einwandfrei
Teste mal ein
Sub nurmalso()
application.Run "MFillDB"
end Sub
direkt in der Datenbank selbst.
Hallo Franz, hallo Steffen,
jetzt habe ich gerade die Excel- und Accessdatei unter neuem Namen gespeichert und dort noch mal geprüft, da hat alles funktioniert! Nun habe ich es auch in meinen Originaldateien getestet und jetzt funktioniert es da auch! Warum weiß ich zwar nicht, da ich in den Originaldateien nichts verändert habe...
Super, Viiiiiiielen Dank für Eure Hilfe!!!
:D :D :D :D
Hallo,
ich vermute, dass an einer anderen DB (in einem anderen Verzeichnis) geändert wurde als an der , die in der String-Variablen definiert wurde.