Ich habe die Prüfung an das Ereignis "Vor dem Aktualisieren" gebunden, weil ich dort beide Werte (vorher und nachher) abfragen kann - siehe "ist modifiziert" prüfen. Das Makro sieht (verkürzt) so aus:
Code: Alles auswählen
dim bchange as Boolean
oForm = oEvent.Source.Parent
bchange = ... ' einfache Prüfung liefert hier true oder false
oldDate = CDate(oEvent.Source.BoundField.String) ' die beiden Vergleichswerte
newDate = CDate(oEvent.Source.Text)
rem bei manchen Situationen Rückfrage über Dialog
if not bchange then
oDlgDesc = globalscope.DialogLibraries.Standard.dlgConfirm
dlg = CreateUnoDialog( oDlgDesc )
bchange = dlg.execute ' OK = ja, andernfalls = Nein
end if
if bchange then ' Änderung tatsächlich ausführen
oForm.updateInt(3, newDate.Year)
...
else
rem Änderung rückgängig machen
' xray oEvent.Source.BoundField
' xray oldDate
' oEvent.Source.BoundField.updateDate(oldDate)
oForm.updateDate(6, oldDate)
end if
Was tun? Jürgen
Nachtrag: Auch im if-Zweig wird oForm.updateXXX benötigt. Ich habe jetzt festgestellt, dass diese Änderungen am gleichen Fehler scheitern. Als ich den Dialog noch nicht eingebaut hatte, hatte es funktioniert. Offensichtlich bringt der Dialog den Zugriff auf oForm durcheinander.
Nachtrag 2: Wenn es doch so einfach wäre. Es sieht so aus, als ob doch nicht der Dialog schuld wäre, sondern das Ereignis. Ich werde wohl doch auf "Fokusverlust" zurückgehen müssen und auf die genaue Anzeige (Zustand alt und neu) verzichten.
Nachtrag 3: Ich verzweifle noch. Jetzt bin ich bei "Fokusverlust" ohne Dialog - und oForm ist auch im if-Zweig nicht mehr belegt. Das war für heute mein letzter Versuch.

Aber vielleicht gibt es eine andere, saubere Lösung.