Unterformular (UFO) erreichen mit Ereignisprozedur
Hallo und Guten Tag liebe Access-Profis,
Bitte um Ihre Hilfe bei folgendem Problem:
Ziel:
Ich möchte mit einer Befehlsschaltfläche verhindern, das der DS gespeichert wird, wenn nicht mind. zwei Felder ausgefüllt sind.
Formular:
Mein Formular besteht aus Haupt- und Ufo.
Mein Problem:
Die erstellte und nachfolgende Ereignisprozedur funktioniert nur für das Kombinationsfeld135 im Hauptformular. Das Feld Anzahl im UFO kann ich mit dieser Ereignisprozedur nicht ansprechen.
Die eingesetzte Ereignisprozedur:
If IsNull(Me!Kombinationsfeld135.Value) Then
MsgBox " Bitte geben Sie die Kundenadresse ein:", vbCritical, "System Meldung"
Me!Kombinationsfeld135.SetFocus
ElseIf IsNull(Me!Anzahl.Value) Then
MsgBox " Bitte geben Sie einen Wert in Feld Anzahl ein:", vbCritical, "System Meldung"
Me!Kombinationsfeld75.SetFocus
Frage:
Was ist zu machen, damit auch das Ufo angesprochen wird?
Über ein Lösung meines Problems würde ich mich sehr freuen.
Mit freundlichen Grüßen
Ingo Neuhaus
Antwort schreiben
Antwort 1 von RalfH vom 26.11.2019, 07:34 Options
Guten Morgen,
Schau mal
HIER unter Punkt 4.2
Antwort 2 von Ingo. vom 26.11.2019, 07:47 Options
Guten Morgen Ralf,
danke für Deinen Tipp! Habe meine Abfrage bereits geändert.
Zitat:
Private Sub Befehl153_Click()
On Error GoTo Err_Befehl153_Click
If Nz(Me!Kombinationsfeld135) = "" Then
MsgBox "Bitte geben Sie die Kundenadresse ein:", _
vbCritical, "System Meldung"
Me!Kombinationsfeld135.SetFocus
Exit Sub
End If
If Nz(Me![Rech-Pos Unterformular].Form!Anzahl) = "" Then
MsgBox "Bitte geben Sie einen Wert in Feld Anzahl ein:", _
vbCritical, "System Meldung"
Me![Rech-Pos Unterformular].SetFocus
Me![Rech-Pos Unterformular].Form!Anzahl.SetFocus
Exit Sub
End If
If Nz(Me![Rech-Pos Unterformular].Form!Test) = "" Then
MsgBox "Bitte geben Sie einen Wert in Feld Leistung ein:", _
vbCritical, "System Meldung"
Me![Rech-Pos Unterformular].SetFocus
Me![Rech-Pos Unterformular].Form!Test.SetFocus
Exit Sub
End If
DoCmd.RunMacro "Rech eing beenden" 'Makro ist Bäh
Exit_Befehl153_Click:
Exit Sub
Err_Befehl153_Click:
MsgBox Err.Description
Resume Exit_Befehl153_Click
End Sub
Jetzt erhalte ich keine Fehlermeldung mehr. Leider läuft das Macro an, obwohl die Felder im Ufo leer sind.
Wäre schön, wenn Du noch eine Idee hättest!
Mit freundlichen Grüßen
Ingo
Antwort 3 von RalfH vom 26.11.2019, 08:14 Options
Morgen Ingo,
In deinem Code sind z.B. Hier:
Zitat:
If Nz(Me!Kombinationsfeld135) = "" Then
MsgBox "Bitte geben Sie die Kundenadresse ein:", _
vbCritical, "System Meldung"
Me!Kombinationsfeld135.SetFocus
Exit Sub
End If
Bei allen IF Abfragen gehört das Exit Sub da nicht hin.
Damit steigst du aus dem Makro aus, bevor die anderen Felder abgefragt sind.
Gruß Ralf
Antwort 4 von Ingo. vom 26.11.2019, 08:39 Options
Hallo Ralf,
Derzeitiger Zustand:
Wenn Kombinationsfeld leer ist erscheint die Meldung "Bitte geben Sie die Kundenadresse ein:" Nun bestätigt der Anwender die Meldung mit ok und kann jetzt die Adresse eingeben.
Dein Tipp Exit Sub weglassen
Wenn Kombinationsfeld leer erscheint die Meldung "Bitte geben Sie..." Wenn ich jetzt mit ok bestätige läuft das Markro und beendet das Formular.
Der Exit Sub Befehl stoppt die Prozedur und nun kann der Wert eingegeben werden.
Leider funktioniert das nicht beim Ufo und ich weiß nicht warum!
Ich veremute mal, dass eine Ereignisprozedur im Ufo erzeugt werden muß!
Gruß
Ingo
Antwort 5 von Teddy7 vom 26.11.2019, 08:58 OptionsLösung
Hallo Ingo !
Die exit sub sind o.k., weil Du damit nur dann die Routine verläßt, wenn eine Fehlersituation eingetroffen ist. Kannst - ja mußt - Du also drin lassen.
Wenn Du schon nz verwendest, dann solltest Du auch vorgeben, mit welchem Wert der NULL-Wert denn ersetzt werden soll. Das sieht dann so aus:
Nz(Me![Rech-Pos Unterformular].Form!Test;"")
Ob der Pfad zu den Unterformular-Feldern richtig gesetzt ist, siehst Du dann, wenn Du den Ablauf mal debugst.
Dazu setzt Du einfach an einer Stelle einen Haltepunkt. Beim nächsten Ausführen landest Du dann im Debugger und kannst einfach den Cursor auf das Feld fahren - Du bekommst dann den aktuellen Wert angezeigt.
Eine Ereignisprozeur im UFO ist m.E. nicht erforderlich, wenn man den Pfad zu den UFO-Feldern richtig setzt, was nicht ganz trivial ist. Also einfach mal rumprobieren.
Gruß
Teddy
Antwort 6 von RalfH vom 26.11.2019, 13:10 OptionsLösung
Hallo,Sorry mein Fehler. Wer lesen kann ist klar im Vorteil
;-)Eigentlich lass ich solche Sachen folgendermaßen ablaufen:
Private Sub Befehl153_Click()
On Error GoTo Err_Befehl153_Click
If isnull(Me!Kombinationsfeld135) = true Then
MsgBox "Bitte geben Sie die Kundenadresse ein:", _
vbCritical, "System Meldung"
Me!Kombinationsfeld135.SetFocus
End If
ElseIf isnull (Forms![Hauptformular]![UFoSteuerelement_im_Hauptformular]![Steuerelement_im_Ufo]) = true Then
MsgBox "Bitte geben Sie einen Wert in Feld Anzahl ein:", _
vbCritical, "System Meldung"
Me![(Forms![Hauptformular]![UFoSteuerelement_im_Hauptformular]![Steuerelement_im_Ufo]).SetFocus
End If
Exit_Befehl153_Click:
Exit Sub
Err_Befehl153_Click:
MsgBox Err.Description
Resume Exit_Befehl153_Click
End Sub
Gruß Ralf
Antwort 7 von Ingo. vom 26.11.2019, 14:09 Options
Hallo Ralf,
hallo Teddy,
Gott sei Dank, das Problem ist gelöst!
Zitat:
Private Sub Befehl153_Click()
On Error GoTo Err_Befehl153_Click
If Nz(Me!Kombinationsfeld135) = "" Then
MsgBox "Bitte geben Sie die Kundenadresse ein:", _
vbCritical, "System Meldung"
Me!Kombinationsfeld135.SetFocus
Exit Sub
End If
Debug.Print "|" & Nz(Me![Rech-Pos Unterformular]!Kombinationsfeld75) & "|"
If Nz(Me![Rech-Pos Unterformular]!Anzahl, 0) = 0 Then
MsgBox "Bitte geben Sie einen Wert in Feld Anzahl ein:", _
vbCritical, "System Meldung"
Me![Rech-Pos Unterformular].SetFocus
Me![Rech-Pos Unterformular]!Kombinationsfel75.SetFocus
Exit Sub
End If
Debug.Print "|" & Nz(Me![Rech-Pos Unterformular]!Test) & "|"
If Nz(Me![Rech-Pos Unterformular]!Test, 0) = 0 Then
MsgBox "Bitte geben Sie einen Wert in Feld Leistung ein:", _
vbCritical, "System Meldung"
Me![Rech-Pos Unterformular].SetFocus
Me![Rech-Pos Unterformular]!Test.SetFocus
Exit Sub
End If
DoCmd.RunMacro "Rech eing beenden"
Exit_Befehl153_Click:
Exit Sub
Err_Befehl153_Click:
MsgBox Err.Description
Resume Exit_Befehl153_Click
End Sub
Herzlichen Dank für Eure Mithilfe!
Mit freundlichen Grüßen
Ingo