Hallo,
Frage zu folgendem Fall.
Ich habe ein Endlosformular mit Kunden (Kundenübersichtsformular)
Öffne ich jetzt das Kundenformular und nehme Änderungen vor, habe ich im Schließen-Button (cmd_schliessen) ein Me.Requery und ein Forms("frmKundenuebersicht").Requery.
Jedoch wird mir das Kundenübersichtsformular nicht aktualisiert.
Hier mal der ganze Code:
Private Sub cmdschliessen_Click()
10 On Error GoTo cmdschliessen_Click_Error
Dim lng_ID As Long
Dim frm As Form
Dim rec As Recordset
20 If Me.Dirty = True Then Me.Requery
30 If Not IsNull(Me!Adress_id) Then
40 If IsNull(Me!txtAdress_Nachname) Then
50 Call MsgBox("Geben Sie einen Nachnamen ein!", vbInformation, "Hinweis!")
60 Me!txtAdress_Nachname.SetFocus
70 Else
80 DoCmd.RunCommand acCmdSaveRecord
90 Me.cmdKunde_loeschen.Enabled = True
100 lng_ID = Me.Adress_id
110 DoCmd.Close acForm, "frmKundenerfassung"
120 Forms("frmKundenuebersicht").Requery
130 Set frm = Forms("frmKundenuebersicht")
140 Set rec = frm.RecordsetClone
150 With rec
160 .FindFirst "Adress_id=" & lng_ID
170 If Not .NoMatch Then
180 frm.Bookmark = rec.Bookmark
190 End If
200 End With
210 Set rec = Nothing
220 Set frm = Nothing
230 End If
240 End If
250 On Error GoTo 0
260 Exit Sub
cmdschliessen_Click_Error:
270 MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure cmdschliessen_Click of VBA Dokument Form_frmKundenerfassung"
End Sub
In einem anderen Formular hatte ich das gleiche Problem.
Dabei fiel mir auf, das wenn ich das Me.Requery und das Forms(...).Requery in einem Private Sub habe, das Forms(...).Requery scheinbar nicht funktioniert.
Führe ich beispielsweise das Me.Requery vor dem Klick auf den Schließen-Button aus, dann funktioniert es
mit dem Forms (...).Requery.
Wie geht man in so einem Fall am besten vor?
Habe auch schon probiert, das Forms(...).Requery bei Private Sub Form_Close()
einzubauen.
Das bringt aber leider auch nichts.
Gruß
Hubert
Hallo,
setz mal das Docmd.Close ...
an Zeile 225
Hallo Franz,
danke für den Tipp.
Das war die Lösung. :)
Da muss man auch erst drauf kommen. :D
Ist es von daher ratsam, den Befehl für das Formular schließen (bei größerem Code) grundsätzlich ans Ende zu stellen?
Gruß
Hubert
Hallo,
naja, offensichtlich ... ;)
Wenn Du den Wasserhahn (Formular) zudrehst , dann läuft auch kein Wasser (Code) mehr . 8)
Hallo Franz,
ZitatWenn Du den Wasserhahn (Formular) zudrehst , dann läuft auch kein Wasser (Code) mehr .
:D Ja, so gesehen logisch.
Ich bin davon ausgegangen, das der aufgerufene Code komplett abgearbeitet wird.
Man lernt ja bekannlich nie aus. ;)
Ich finde, dass die Zeilennummern die Übersicht des Codes vollkommen zu nichte machen. Als Endanwender würde mich auch eine MsgBox nach dem Schema der MZ-Tools eher irritieren als informieren. Wenn Du entsprechende Formularereignisse nutzt, kann der Code IMHO besser gegliedert werden, und die Programmierlogik fällt einfacher aus.Private Sub cmdSchliessen_Click()
10 On Error GoTo cmdschliessen_Click_Error
20 If Me.Dirty Then Me.Dirty = False 'Hierbei kann Fehler#: 2501 auftreten
30 DoCmd.Close acForm, Me.Name, acSaveNo
40 Exit Sub
cmdschliessen_Click_Error:
50 Select Case Err.Number
Case 2501: 'entsprechende Meldung ist schon erfolgt
60 Case Else: MsgBox "Error " & Err.Number & " in Zeile " & Erl & _
" (" & Err.Description & ") in Sub cmdSchliessen_Click " & _
"im VBA Dokument Form_frmKundenerfassung"
70 End Select
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.txtAdress_Nachname) Then
MsgBox "Geben Sie einen Nachnamen ein!", vbInformation, "Hinweis!"
Me.txtAdress_Nachname.SetFocus
Cancel = True 'löst Fehler#: 2501 in der aufrufenden Methode aus
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Const FORM_KUNDENUEBERSICHT As String = "frmKundenuebersicht"
Dim frm As Access.Form
Dim rec As DAO.Recordset
If CurrentProject.AllForms(FORM_KUNDENUEBERSICHT).IsLoaded Then
If Not IsNull(Me.Adress_id) Then
Set frm = Forms(FORM_KUNDENUEBERSICHT)
Set rec = frm.RecordsetClone
rec.FindFirst BuildCriteria("Adress_id", dbLong, Me.Adress_id)
If Not rec.NoMatch Then frm.Bookmark = rec.Bookmark
End If
End If
End Sub
Hallo Lachtaube,
da hast Du recht. :D
Da sieht man den Unterschied vom Laien zum Profi ;).
Es gibt sicherlich sogar unter den Profis unterschiede in der Programmiertechnik.
(Sozusagen die persönliche Handschrift des Programmierers).
Grüßle
Hubert