Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Knopf am Juni 18, 2017, 10:04:17

Titel: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 18, 2017, 10:04:17
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!
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Lachtaube am Juni 18, 2017, 10:12:36
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.
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 20, 2017, 13:36:04
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
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: bahasu am Juni 20, 2017, 14:18:45
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
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: DF6GL am Juni 20, 2017, 14:22:58
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.
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 20, 2017, 15:10:47
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 :(
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Beaker s.a. am Juni 20, 2017, 17:05:34
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
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 20, 2017, 19:02:14
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!
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: DF6GL am Juni 20, 2017, 19:21:45
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.
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 29, 2017, 19:58:35
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!
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: DF6GL am Juni 30, 2017, 09:13:17
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
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 30, 2017, 16:31:19
Ah vielen Dank! Das ist ein guter tipp. Wie kann ich eine meldung erhalten, falls ein fehler auftritt?
Lg
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: MzKlMu am Juni 30, 2017, 16:35:45
Hallo,
die Meldung kommt mit dbFailOnError automatisch.
Titel: Re: Makro automatisch ausführen nach Eingabe/Änderung eines Datensatzes
Beitrag von: Knopf am Juni 30, 2017, 16:40:24
Klasse :):)