Hallo VBA-Experten!
Dank eurer Hilfe konnte ich mein Makro erstellen. Jetzt soll es automatisch ausgeführt werden können...Sobald in der Tabelle tblmop ein Datensatz eingefügt oder geändert wird, soll dieses Makro ausgeführt werden. (Das Makro fügt 2 Tabellen zusammen) Wie erreicht man die automatische Ausführung?
Vielen Dank für eure Hilfe!
Datenmakros ab Version 2010 könnten auf die genannten Ereignisse direkt reagieren - jedoch keine andere Art von Makro oder gar VBA-Code ausführen. Ansonsten besteht noch die Möglichkeit in Formularen im Vor- und/ioder Nach Aktuslisierung Ereignis auch gespeicherte Makros und/oder VBA-Code auszuführen.
Hallo Lachtaube,
Ich habe eine funktion erstellt, die wie gewünscht funktioniert und diese auch als makro gespeicherr. Wenn ich nun versuche ein Datenmakro zu erstellen und dort meine Funktion einzufügen, passiert nichts...
Ist das gar nicht möglich? Was mache ich falsch? Es muss doch möglich sein selbst erstellte makros nach aktualisierung auszuführen?:(
Lg
Hi,
im Formular gibt es das Ereignis "Nach Aktualisierung" (auf Ebene des Steuerelementes bzw des Datensatzes).
Dort kann im VBA-Code eingetragen werden:
DoCmd.RunMacro "Hier nun den Names des Makros eintragen"
Vielleicht hilft das.
Harald
Hallo,
ZitatDatenmakros ab Version 2010 könnten auf die genannten Ereignisse direkt reagieren - jedoch keine andere Art von Makro oder gar VBA-Code ausführen.
Hallo Harald,
ich habe es ausprobiert: Ich habe in meinem Eingabeformular ein unterformular, welches bei der dateneingabe mit einem makro aktualisiert wird. Für das unterformular habe ich den code im entwurfsmodus eingegebn. DoCmd.RunMacro "macActMop" aber es tut sich nichts :(
Hallo Knopf,
ZitatFür das unterformular habe ich den code im entwurfsmodus eingegebn. DoCmd.RunMacro "macActMop"
Wo hast du den eingegeben? So wie von Harald beschrieben?
Ausserdem, warum Macro, wenn du doch ein Formular(modul)
hast (siehe #1)
Zitatoder VBA-Code auszuführen.
Ich würde das gleich mit VBA machen, - Prinzip:
Private Sub Form_AfterUpdate()
If Me.NewRecord Then
CurrentDb.Execute "INSERT INTO ... "
Else
CurrentDb.Execute "UPDATE ... "
End If
End Sub
Zudem solltest du vielleicht nicht vergessen in "Form_BeforeUpdate"
die Daten evtl. auf korrekte Eingaben zu überprüfen (z.B. leere Pflichtfelder).
gruss ekkehard
Hallo!
Ja so habe ich es gemacht: Ich habe das Unterformular geöffnet, habe in dem Feld "Nach Aktualisierung" Ereignisprozedur gewählt und folgenden Code geschrieben:
Private Sub Form_AfterUpdate()
Call ActMo
End Sub
-------------------------
Function ActMo()
Set db = CurrentDb()
DoCmd.SetWarnings False
DoCmd.RunSQL "DROP TABLE tblMo;"
DoCmd.SetWarnings True
db.Execute "abfMo" 'Tabellenerstellung
DoCmd.SetWarnings False
DoCmd.RunSQL "DROP TABLE tblAuswMo;"
DoCmd.SetWarnings True
db.Execute "abfAuswMo" 'Tabellenerstellung
db.Execute "ALTER TABLE [tblAuswMo] ALTER COLUMN [AuswertungMo] Single"
End Function
----------
Aber es will nicht funktionieren :( Die Funktion ist getestet und läuft wenn ich sie aus dem VBA-Editor starte...
Danke für eure Hilfe!
Hallo,
-- lass das "Call" weg. Dies wird nur für Subs benötigt.
-- Wo steht die Funktion "ActMo()" ? Im selben Klassenmodul oder in einem Standardmodul?
-- Was steht in der Form-Ereignis-Eigenschaft "Nach Aktualisierung"?
btw: es muss zwischen VBA-Prozeduren (Functions, Subs) und Makros unterschieden werden!
Um eine VBA-Prozedur beim Auftreten eines Ereignis aufzurufen, muss in der entspr. Ereignis-Eigenschaft(enzeile)
[Ereignisprozedur]
stehen.
Setze einen Haltepunkt in die AfterUpdate-Prozedur und prüfe, ob die Prozedur überhaupt aufgerufen wird.
Hallo!
Dank eurer Hilfe konnte ich es lösen, Vielen Dank!:)
Meine Funktion war in einem Standardmodul Deshalb muss mein Aufruf wie folgt aussehen:
Private Sub Form_AfterUpdate()
Modact.ActMop
End Sub
Das Modul muss auch drinstehen...
Mein Makro habe ich so aufgebaut:
Function ActMop()
Dim db As DAO.Database
Set db = CurrentDb()
CurrentDb.Execute "DELETE FROM tblAuMop;"
db.Execute "abfMop"
db.Execute "abfAuMop"
End Function
Jetzt funktioniert alles einwandfrei :):):)
Viele Grüße!
Hallo,
das ist kein
Makro, sondern eine VBA-Prozedur. Makros sind etwas anderes.
Zudem wäre sinnvoll:
ZitatFunction ActMop()
Dim db As DAO.Database
Set db = CurrentDb()
db.Execute "DELETE FROM tblAuMop;"
db.Execute "abfMop", dbFailOnError
db.Execute "abfAuMop", dbFailOnError
End Function
Ah vielen Dank! Das ist ein guter tipp. Wie kann ich eine meldung erhalten, falls ein fehler auftritt?
Lg
Hallo,
die Meldung kommt mit dbFailOnError automatisch.
Klasse :):)