Zum Ersten Feld zurückspringen

Hallo Leute, ich brauche dringend eure Hilfe.

Ich weiß mein Anliegen erscheint nicht für jeden sinnvoll, aber ich muss es auf diesem Weg hinbekommen.

Folgende Problematik:
Ich habe 2 Textfelder (Datentyp: Zahl -> ID und ID_2), diese Vergleiche ich miteinander auf Gleichheit. Sind sie nicht gleich, werden beide gelöscht und der Benutzer wird gezwungen beide Zahlen noch einmal einzugeben.
Jetzt soll der Cursor wieder zu der Ersten Eingabe springen (-> ID).
Dieses Problem bekomme ich nicht hin. Der Cursor bleibt immer im 2. Feld(-> ID_2) stehen.
Hat jemand eine Lösung?

Hier ist der Code den ich benutze:

Private Sub Form\_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Or IsNull(Me!ID\_2) Then
MsgBox "Gebe bitte eine ID ein!"
Cancel = True
Exit Sub
End If 

Nz(Me!ID, 0) Nz(Me!ID\_2, 0) Then
MsgBox "Die ID Nummern sind nicht identisch!" & vbCrLf & \_ "Bitte nochmals eingeben!"
Me!ID\_2.Undo
Me!ID = Null
Cancel = True
End If
End Sub

'Zweiteingabe ID: Vergleich
Private Sub ID\_2\_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID\_2) Then
MsgBox "Gebe bitte eine ID ein!"
Cancel = True
Exit Sub
End If
If IsNull(Me!ID) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID\_2, 0) Then
MsgBox "Die ID Nummern sind nicht identisch!" & vbCrLf & \_
"Bitte nochmals eingeben!"
Me!ID\_2.Undo
Me!ID = Null
Cancel = True
End If
End Sub

'Ersteingabe ID: Vergleich
Private Sub ID\_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Then
MsgBox "Gebe bitte eine ID ein!"
Cancel = True
Exit Sub
End If

If IsNull(Me!ID\_2) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID\_2, 0) Then
MsgBox "Die ID Nummern sind nicht identisch!" & vbCrLf & \_
"Bitte nochmals eingeben!"
Me!ID.Undo
Me!ID\_2 = Null
Cancel = True
End If
End Sub

Me!ID.SetFocus
OWT

Gruß
Christian

Hallo emma,

Ich weiß mein Anliegen erscheint nicht für jeden sinnvoll,
aber ich muss es auf diesem Weg hinbekommen.

richtig, nicht sinnvoll, da der User nur die Chance hat beide IDs richtig einzugeben, frage ich mich natürlich, warum du nicht gleich die zweite ID mit den Daten der ersten ID vorbelegst?

Folgende Problematik:
Ich habe 2 Textfelder (Datentyp: Zahl -> ID und ID_2),

also hast du zwei Zahlenfelder :smile:

diese Vergleiche ich miteinander auf Gleichheit. Sind sie
nicht gleich, werden beide gelöscht und der Benutzer wird
gezwungen beide Zahlen noch einmal einzugeben.

sehe Benutzerfreundlich, es sei denn es ist ein Test für den Benutzer?

Jetzt soll der Cursor wieder zu der Ersten Eingabe springen
(-> ID).
Dieses Problem bekomme ich nicht hin. Der Cursor bleibt immer
im 2. Feld(-> ID_2) stehen.
Hat jemand eine Lösung?

ja natürlich, wie du in den Postings unten lesen kannst:

docmd.gotocontrol „ID“

Hier ist der Code den ich benutze:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Or IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True

docmd.gotocontrol „ID“

Exit Sub
End If

vor dem Aktualisieren wird geprüft, ob überhaupt eine ID eingegeben wurde!

Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then

^^ hier fehlt ein „IF“

MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“

ich würde es so machen:

Me!ID_2 = Null
Me!ID = Null
Cancel = True

docmd.gotocontrol „ID“

End If
End Sub

'Zweiteingabe ID: Vergleich
Private Sub ID_2_BeforeUpdate(Cancel As Integer)

besser wäre es, immer erst beim Fokusverlußt die Prüfung durchzuführen!

If IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End If

If IsNull(Me!ID) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“
Me!ID_2.Undo
Me!ID = Null
Cancel = True
End If
End Sub

'Ersteingabe ID: Vergleich
Private Sub ID_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End If

If IsNull(Me!ID_2) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“
Me!ID.Undo
Me!ID_2 = Null
Cancel = True
End If
End Sub

Hmm, du könntest dir das Leben erleichtern, wenn du die Gültigkeitsprüfung nutzt, die in jedem Feld schon eingebaut ist.
Dann würde eine Funktion reichen, beim Fokusverlußt der ID_2, die prüft, ob beide gleich sind.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Vielen Dank für die schnelle Antwort!

Ich habe jetzt stundenlang herumporbiert, aber es funktioniert einfach nicht.

Ist es richtig, dass die beiden Zahlenfelder auf LostFocus gesetzt werden müssen? Bitte siehe Code noch einmal.
Ich sitze da schon Tage dran, ich muss es einfach hinbekommen. Würde sich vielleicht noch einmal jemand Zeit nehmen? Wo liegt mein Fehler?

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Or IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
docmd.gotocontrol „ID“
Exit Sub
End IfNz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _ „Bitte nochmals eingeben!“
Me!ID_2.Undo
Me!ID = Null
Cancel = True
docmd.gotocontrol „ID“
End If
End Sub’Zweiteingabe ID: Vergleich
Private Sub ID_2_LostFocus()
If IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End IfIf IsNull(Me!ID) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“
Me!ID_2.Undo
Me!ID = Null
Cancel = True
End If
End Sub’Ersteingabe ID: Vergleich
Private Sub ID_LostFocus()
If IsNull(Me!ID) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End IfIf IsNull(Me!ID_2) Then Exit Sub
If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“
Me!ID.Undo
Me!ID_2 = Null
Cancel = True
End If
End Sub

Hallo emma,

Ich habe jetzt stundenlang herumporbiert, aber es funktioniert
einfach nicht.

WAS bitte funktioniert nicht?

Ist es richtig, dass die beiden Zahlenfelder auf LostFocus
gesetzt werden müssen?

es macht mehr Sinn. Obwohl eigentlich nur bei ID_2. Den Code für ID kannst du dir sparen.

Bitte siehe Code noch einmal.

es ist ja immer noch der alte Code!?

Ich sitze da schon Tage dran, ich muss es einfach hinbekommen.
Würde sich vielleicht noch einmal jemand Zeit nehmen? Wo liegt
mein Fehler?

hattest du meine Antwort nicht gelesen?
Die Feldbezeichnungen sind bei beiden Feldern so richtig?
Die Felder haben nicht den Typ: Autowert?

ID ist ein besonderer Bezeichner in Access, ich würde ID_1 und ID_2 verwenden. Das Ausrufezeichen war mal richtig als Trenner bei den älteren Access Versionen. Bei den Versionen ab 2000 wird aber der Punkt verwendet.
(Me!ID = Me.ID)

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me!ID) Or IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
docmd.gotocontrol „ID“
Exit Sub
End

If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“

Me!ID_2.Undo

hier KEIN undo, sondern das Feld auf NULL setzen
Me.ID_2 = Null

Me!ID = Null
Cancel = True
docmd.gotocontrol „ID“
End If
End Sub

'Zweiteingabe ID: Vergleich

Private Sub ID_2_LostFocus()
If IsNull(Me!ID_2) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End If

den Code bis hier kannst du dir sparen, dafür gibt es die Gültigkeitsprüfung bei den Feldeigenschaften.

'hier würde ich mehr schreiben

If IsNull(Me!ID) Then

Msgbox „ID wurde nicht eingegeben“
docmd.gotocontrol „ID“

Exit Sub

endif

If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“

Me!ID_2.Undo

hier KEIN undo, sondern das Feld auf NULL setzen
Me.ID_2 = Null

Me!ID = Null
Cancel = True

'und sicherheitshalber:
docmd.gotocontrol „ID_2“

End If
End Sub

'Ersteingabe ID: Vergleich

Private Sub ID_LostFocus()
If IsNull(Me!ID) Then
MsgBox „Gebe bitte eine ID ein!“
Cancel = True
Exit Sub
End If

den Code bis hier kannst du dir sparen, dafür gibt es die Gültigkeitsprüfung bei den Feldeigenschaften.

?? ID_2 muss doch leer sein, da z.Z. ja nur die ID eingegeben wird!
!! die Prüfung hier ist überflüssig und führt immer zu einem Fehler. also -> löschen !!

If IsNull(Me!ID_2) Then Exit Sub

If Nz(Me!ID, 0) Nz(Me!ID_2, 0) Then
MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“

Me!ID.Undo
Me!ID_2 = Null
Cancel = True
End If
End Sub

somit ist klar: für die ID brauchst du keinen Code!! Den kannst du komplett löschen!

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Vielen Dank für deine Geduld.

Soweit funktioniert schonmal alles ohne Fehlermeldungen.

Ja, die Feldbezeichnungen sind beide auf Zahl gesetzt.

  • Ich habe alle ! durch einen . ersetzt
  • ID habe ich mit ID_1 ersetzt
  • den Code für ID_1 habe ich komplett weg gelassen

Zuerst soll die ID_1 eingegeben werden, dann ID_2 und wenn sie ungleich sind, soll der Cursor wieder zu ID_1 springen, damit beide noch einmal eingegeben werden. Und das funktioniert nicht.

Nach der Eingabe von ID_2 kommt die MsgBox, aber dann springt der Cursor in das nach kommende Feld. Hast du noch eine Idee?

Hallo emma,

Soweit funktioniert schonmal alles ohne Fehlermeldungen.

das freut mich :smile:

Nach der Eingabe von ID_2 kommt die MsgBox, aber dann springt
der Cursor in das nach kommende Feld. Hast du noch eine Idee?

dein Code sollte in dem Fall so aussehen:

Private Sub ID_2_LostFocus()

If Nz(Me!ID_1, 0) Nz(Me!ID_2, 0) Then

Me!ID_1 = Null
Me!ID_2 = Null

docmd.gotocontrol „ID_1“

MsgBox „Die ID Nummern sind nicht identisch!“ & vbCrLf & _
„Bitte nochmals eingeben!“

End If
End Sub

Das sollte nun funktionieren!

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Vielen Lieben Dank, funktioniert alles Bestens.

Liebe Grüße Emma