Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Löschen von Wert in Textfeld unterbinden

Begonnen von jagger, November 19, 2018, 21:27:46

⏪ vorheriges - nächstes ⏩

jagger

Hallo,

kann man mit VBA verhindern, dass der Inhalt (Wert) eines Textfeldes
(in diesem Fall: Datum) durch Markieren und Taste "Entf"
oder durch Markieren und Taste "Backspace" gelöscht wird?

Vielen Dank im Voraus
LG
jagger

Lachtaube

#1
Wenn man neue Datensätze von dem Vorhaben ausschließen will, geht z.B. Folgendes:
Private Sub Form_Current()
   With Me.DasDatumssteuerelement
      .Enabled = Me.NewRecord
      .Locked = Not .Enabled
   End With
End Sub
Grüße von der (⌒▽⌒)

jagger

Hallo Lachtaube,
wenn ich das Formular, in dem das Ufo mit dem Datumssteuerelement liegt, öffne, ist alles okay.
Allerdings kann ich weiterhin ein Datum markieren und löschen.
Wenn ich aber die Datenherkunft von dem Ufo wechsle und dann die Datenherkunft wieder auf das (Unter)Formular (im UFO) mit dem Datumssteuerelement stelle, dann kommt "Laufzeitfehler" und er mault
Me![tDate].Locked = Not .Enabled an.
Oder habe ich Deinen Code falsch umgesetzt?
Private Sub Form_Load()
With Me![tDate].Enabled = Me.NewRecord
Me![tDate].Locked = Not .Enabled
End With
End Sub

Der Hintergrund ist:
Ich rufe mit Private Sub tDate_Enter()
Call ShowDatePicker
End Sub

den Datapicker auf und damit das Datum gleich in einem
Schritt gespeichert wird, nutze ich dann noch Private Sub tDate_Change()
Me.sprungfeld.SetFocus
End Sub

Wird nun das Datum gelöscht, löst das einen Fehler
"Der Fokus kann von Microsoft Access nicht auf das Steuerelement |1 verschoben werden." aus.
Natürlich will er dann auch debuggen.

Oder kann man das Ergebnis des Löschens abfangen?
Private Sub tDate_Change()
If Me![tDate]  ...  :-\
End if
End sub

Ich habe schon alles alles mögliche probiert:
Is Null; ""; <"0"; ...

Was hat das Datumssteuerelement für einen Wert, wenn man den Inhalt markiert und dann löscht?
Hat jemand noch einen Tipp?

Mit bestem Dank im Voraus
jagger

Lachtaube

Entschuldige Jagger, dass beim ersten Senden die Zeilenumbrüche in die Knie gingen. Ich habe das weiter oben korrigiert.

Das Beim Anzeigen Ereignis (Current) sollte vollkommen genügen, um in alten Datensätzen das Datumsfeld zu sperren. Du musst nur DasDatumssteuerelement gegen tDate austauschen.
Grüße von der (⌒▽⌒)

jagger

Hallo Lachtaube,
das funktioniert jetzt.
Leider kann man die alten Daten nicht mehr verändern bzw.
bearbeiten.

Ich werde mal weiter probieren.

Danke Dir!
LG
jagger

Lachtaube

Wer alte Daten bearbeiten muss, hat entweder falsche Eingaben gemacht oder ein schlechtes Datenmodell vorliegen. :)

Aber per Knopfdruck oder Tastatur-Shortcut könnte man das Steuerelement auch temporär wieder entsperren und aktivieren, indem die Locked-Eigenschaft auf False und die Enabled-Eigenschaft auf True gesetzt wird und nach verrichteter Arbeit wieder zurücksetzen.
Grüße von der (⌒▽⌒)

jagger

Hallo Lachtaube,
ZitatWer alte Daten bearbeiten muss, hat entweder falsche Eingaben gemacht oder ein schlechtes Datenmodell vorliegen. :)
:) :) :)
Das sind Termine (siehe Anhang). Da kann es schon mal vorkommen, dass ein Kunden anruft und seinen Termin verschieben will.

An das Entsperren mittels Doppelklick habe ich auch schon überlegt. Aber dann kann man das Datum ja auch wieder "ausversehen" löschen. ... und da sind wir wieder bei der Fehlermeldung (siehe oben).

Also, weiter nach dem Zustand nach dem Löschen forschen.

Trotzdem ersmal vielen Dank!
LG
jagger

Beaker s.a.

@jagger
Du willst also nur verhindern, dass da nichts drinsteht. Dazu würde ich das
Ereignis "Vor Aktualisierung" (_BeforeUpdate) des Datumsfeldes verwenden.
Private Sub DeinFeld_BeforeUpdate(Cancel As Integer)
    If Len(Me.DeinFeld) = 0 Then
        MsgBox "Das Datum darf nicht leer sein!"
        Cancel = True
    Else
        'hier könntest du noch auf ein gültiges Datum prüfen
    End If
End Sub


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
Private Sub Form_Current()
    Me.Datumsfeld.Locked = Not IsNull(Me.Datumsfeld)
End Sub
erlaubt einmalig die Eingabe eines Datums. Danach ist das Feld gesperrt. Auch löschen funktioniert nicht.
So lange der DS nicht verlassen wird, kann das Feld auch noch geändert werden.

Ggf. braucht es ein Hintertürchen, wenn man später sieht dass der Eintrag falsch ist.
Gruß Klaus

jagger

@ekkehard,

Danke für den Tipp, aber da ist
Private Sub tDate_Change()
Me.sprungfeld.SetFocus
End Sub

schneller zur Stelle und das Problem ist wieder da.

LG
jagger


Beaker s.a.

@Jagger
Dann entferne das und setze den Focus _AfterUpdate.
Gespeichert wird bei dieser Aktion aber nur, wenn dabei der Fokus vom
UFo zum HFo wandert, wonach es allerdings nicht aussieht. Ansonsten
Private Sub DeinFeld_AfterUpdate()
    Me.Dirty = False
    Me.sprungfeld.SetFocus
'Was ist denn das überhaupt für ein Feld? Oder habe ich da was überlesen?
End Sub


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

#11
@Jagger
Mein Vorschlag aus #8 erfüllt doch genau Deine Vorgaben aus Deinem Eröffnungsbeitrag. Schon probiert ?
Und wenn Du per Doppelklick entperrst, ksnnst Du das Feld natürlich bearbeiten und somit auch löschen. Aber das ist dann ja auch Sinn der Sache.
Gruß Klaus

jagger

@MzKlMu,
ich will ja gerade verhindern, dass man das Datum löschen kann, da sonst die Fehlermeldung kommt.

LG
jagger

jagger

#13
@ekkehard,
Zitat'Was ist denn das überhaupt für ein Feld? Oder habe ich da was überlesen?
es ist ein gebundenes Texfeld, Datumsfeld.
Siehe Hintergrung #3

Mit Deinem letzten Vorschlag klappt es nicht.
Der Cursor springt nicht in das Sprungfeld.
Nach dem "Loslassen" des gewählten Datums im DatePicker
wird ja noch nicht gespeichert.

LG
jagger

MzKlMu

Hallo,
irgendwie habe ich da Verständnisprobleme.
Wenn das Feld gesperrt ist, kannst Du auch nichts löschen. Und wenn es frei ist, kannst Du ändern, also auch löschen.
Gruß Klaus