Neuigkeiten:

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

Mobiles Hauptmenü

Welches Ereignis?

Begonnen von NinaG, Oktober 13, 2015, 15:51:23

⏪ vorheriges - nächstes ⏩

NinaG

Hallo zusammen,

ich habe eine Sub in einem Modul geschrieben, dort wird überprüft ob alle notwendigen Textfelder ausgefüllt sind, damit ein Datensatz mit diesen Daten hinzugefügt werden kann.(Erst dann wird der Buttton zum hinzufügen entsperrt)

Nun wollte ich beim Wechseln in irgendein anderes Feld diese Sub benutzen, ich finde aber kein passendes Ereignis im Formular (hatte gedacht mit "Beim Anzeige" geht es).

Muss ich jetzt für jedes Feld das Ereignis "Beim Verlassen" auswählen und die Sub dort aufrufen oder gibt es eine andere weniger umständliche Möglichkeit?

Liebe Grüße
Nina

MaggieMay

Hi,

das geeignete Ereignis hierzu wäre "Form_BeforeUpdate".
Freundliche Grüße
MaggieMay

NinaG

Damit klappt es leider auch nicht. :(

Habe es probeweise auch in einem Feld "Beim Verlassen" aufgerufen, da klappt es.

MaggieMay

ZitatDamit klappt es leider auch nicht.
Was genau bedeutet das? Wie zeigt sich für dich dieses "Nicht-Klappen"?
Und wie sieht dein Code dazu aus?
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
ZitatNun wollte ich beim Wechseln in irgendein anderes Feld diese Sub benutzen,
das Ereignis "Vor Aktualisierung" des Formulars greift nicht wenn nur ein Feldwechsel stattfindet. Wenn man auf ein Feldwechsel reagieren will, so ist das gleichnamige Feldereignis zu verwenden.
"Beim Verlassen" ist ungeeignet, da dann der Wert schon in der Tabelle steht, das heißt der Feldinhalt ist schon aktualisiert.

Am besten geeignet ist aber das Formularereignis "Vor Aktualisierung", denn damit kann ich vor dem Schreiben des Datensatzes alle Felder auf Richtigkeit/Plausibilität prüfen.
Gruß Klaus

MaggieMay

Hi,
Zitat"Beim Verlassen" ist ungeeignet, da dann der Wert schon in der Tabelle steht
das Ereignis "Beim Verlassen" hat eine Cancel-Option, ist also durchaus geeignet, und gespeichert wird erst am Ende und zwar der ganze Datensatz, nicht ein einzelnes Feld. Dennoch hate ich das Formularereignis weiterhin für am besten geeignet, die Einzelfeldprüfung und das im schlimmsten Fall serienweise Aufpoppen von Fehlermeldungen ist nicht gerade benutzerfreundlich.
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
der Feldinhalt ist aber "Beim Verlassen" aktualisiert. Und dann dürfte Undo für das Feld nicht mehr funktionieren, habe ich jetzt aber nicht probiert.
Gruß Klaus

NinaG

Der Button (Forms![Projekt hinzufügen]!Hinzufügen) soll nur enabled sein wenn die Eingaben in den Feldern vorhanden und nicht fehlerhaft sind.
Dafür diese Sub:

Public Sub ProjektHinzufügenEnabled()
    If Forms![Projekt hinzufügen]!Meldung = "" And Len(Forms![Projekt hinzufügen]!Projektnummer) > 0 And Len(Forms![Projekt hinzufügen]!Gruppenname) > 0 And Len(Forms![Projekt hinzufügen]!Kostenstelle) > 0 And Len(Forms![Projekt hinzufügen]!Ablaufdatum) > 0 Then
        Forms![Projekt hinzufügen]!Hinzufügen.Enabled = True
    Else: Forms![Projekt hinzufügen]!Hinzufügen.Enabled = False
    End If
End Sub

Für Ereignis beim Verlassen klappt es, ich wollte abe rnciht unbedingt für jedes Feld, eine solche Sub anlegen und überall die Sub zum Prüfen reinschreiben. Sondenr ein Ereignis fürs ganze Formular.(Ich wollte dies in ähnlicher Form für mehrere Formulare machen wo es dann auch einige Felder mehr sein könnten)
Also hier klappt es:

Private Sub Projektnummer_Exit(Cancel As Integer)
    Dim z As Integer
    If Len(Projektnummer) > 0 Then
        z = DCount("*", "public_Projekte", "Projektnummer Like " & Projektnummer)
        If Not z = 0 Then
            Meldung = "Das Projekt existiert bereits!"
            Me!Projektnummer.ForeColor = 255
        Else
            Meldung = ""
            Me!Projektnummer.ForeColor = 0
        End If
    Else
        Meldung = ""
        Me!Projektnummer.ForeColor = 0
    End If
    ProjektHinzufügenEnabled
End Sub

Falls es nicht geht lasse ich es halt sein.

MaggieMay

#8
Hi,

auf das Formularereignis "Vor Aktualisierung" bist du bereits hingewiesen worden und nur da kannst du das Speichern des aktuellen Datensatzes aktiv verhindern.
Warum setzt du das also nicht so um??

Beispiel:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me!Meldung = "" And Len(Me!Projektnummer) > 0 And _
                              Len(Me!Gruppenname) > 0 And _
                              Len(Me!Kostenstelle) > 0 And _
                              Len(Me!Ablaufdatum) > 0 Then
        Me!Hinzufügen.Enabled = True
    Else
        Me!Hinzufügen.Enabled = False
        Cancel = True
    End If
End Sub

Das (De-)Aktivieren des Buttons "Hinzufügen" ist dann allerdings nicht mehr sinnvoll.

BTW:
Codeauszüge bitte stets in Code-Tags packen.
Freundliche Grüße
MaggieMay