Undo wird nicht ausgeführt

17/01/2008 - 13:05 von Michael Alexander | Report spam
Hallo NG!

Ich habe folgendes Problem:

In einem Popup-Kalender wàhle ich mit Doppelklick ein Datum aus, der
Kalender schließt sich und das Datum wird mit der Funktion
*******
Function DatumHolen(Datumswert As Variant) As Variant
Dim objAufrufFormular As Form
Dim objAufrufButton As Control
Dim RetVal As Long
Dim typRect As RECT

Set objAufrufFormular = Forms(Application.CurrentObjectName).Form
RetVal = GetWindowRect(objAufrufFormular.hWnd, typRect)
lngLinks = PixelInTwips(typRect.Left, True)
lngOben = PixelInTwips(typRect.Top, False) + _
PixelInTwips(GetSystemMetrics(SM_CYCAPTION), False)

Set objAufrufButton = objAufrufFormular.ActiveControl
lngLinks = lngLinks + objAufrufButton.Left
lngOben = lngOben + objAufrufButton.Top + objAufrufButton.Height

DoCmd.OpenForm "PopUpKalender", WindowMode:=acDialog,
OpenArgs:=Nz(Datumswert)
If IsOpen("PopUpKalender") Then
DatumHolen = Forms!PopUpKalender.Kalender.Value
DoCmd.Close acForm, "PopUpKalender"
Else
DatumHolen = Null
End If
End Function
*******

richtig in ein Datumsfeld gesetzt, welches sich auf dem aufrufenden frm
befindet. Der Kalender wird mit btn AddDays aufgerufen.
********
Private Sub AddDays_Click()
On Error GoTo Err_AddDays_Click
Dim Ausgabe As Variant
Ausgabe = DatumHolen(Me.txtDatum.Value)
If Not IsNull(Ausgabe) Then
'Me.txtDatum.SetFocus
Me.txtDatum = Ausgabe
End If
Call txtDatum_BeforeUpdate(False)
Call txtDatum_AfterUpdate 'ist durch obiges Set.Focus nicht nötig
Exit_AddDays_Click:
Exit Sub

Err_AddDays_Click:
MsgBox Err.Description
Resume Exit_AddDays_Click

End Sub
***********

Dort habe ich ein Ereignis

*************
Private Sub txtDatum_BeforeUpdate(Cancel As Integer)
If Me.txtDatum < Date Then
MsgBox "Sie können kein Datum aus der Vergangenheit wàhlen!", vbCritical +
vbOKOnly, "Falsches Datum!"
Cancel = True
Me.txtDatum.Undo
End If
End Sub
*********

welches verhindert, dass jemand ein Vergangenheitsdatum wàhlt.

Leider wird Me.txtDatum.Undo nur bei manueller Eingabe durchgeführt und das
ursprüngliche Datum belassen, nicht wenn ich den Wert aus dem Kalender
übernehme.
Es erscheint zwar die Msgbox, aber das Datum wird trotzdem falsch gesetzt.

Da ich die fnc DatumHolen auch noch anders wo brauche, wo keine
Datumsprüfung erfolgen soll, kann ich auch nichts in der fnc DatumHolen
prüfen.

Wie kann ich das lösen?

Danke
Michael

A2k, SP3
 

Lesen sie die antworten

#1 Henry Habermacher
17/01/2008 - 13:12 | Warnen spam
Hallo Michael

Michael Alexander wrote:
Private Sub txtDatum_BeforeUpdate(Cancel As Integer)
If Me.txtDatum < Date Then
MsgBox "Sie können kein Datum aus der Vergangenheit wàhlen!", vbCritical +
vbOKOnly, "Falsches Datum!"
Cancel = True
Me.txtDatum.Undo
End If
End Sub

welches verhindert, dass jemand ein Vergangenheitsdatum wàhlt.
Leider wird Me.txtDatum.Undo nur bei manueller Eingabe durchgeführt und
das ursprüngliche Datum belassen, nicht wenn ich den Wert aus dem Kalender
übernehme.
Es erscheint zwar die Msgbox, aber das Datum wird trotzdem falsch gesetzt.




Ist Me.txtDatum an ein Datenbank Feld gebunden? Falls nein, lies' nochmals
in der OH nach. Der Undo geht nur bei gebundenen Formularen und Feldern. Bei
den anderen musst Du Dir den Original Wert selber merken. Eine Möglichkeit
ist beispielsweise, dass Du den Inhalt in ein zweites, unsichtbar
geschaltetes Feld wegschreibst und statt des Undos dann eben den Inhalt
dieses Feldes zurückholst.

Gruss
Henry

Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen