Datenüberprüfung: Verhindern von <Entf>
#1
Hallo.

Vorneweg: Zellen sperren und Blattschutz setzen kommt (leider) nicht infrage.

In die Zellen F8:F100 wird, je nach Erfüllung der Bedingungen, mittels VBA etwas hineingeschrieben. Ist es möglich per Datenüberpüfung zu verhindern, dass der Text verschwindet, wenn man a) Entf drückt, oder b) etwas anderes hineinschreibt?

Für b) gibt es ja die elegante Lösung mit Textlänge = 0. Ich habe versucht, das irgendwie benutzerdefiniert in den Griff zu bekommen, leider erfolglos!

Gruß
Uwe
Antworten Top
#2
Hallo,

wenn du das Makro erneut startest, müssten die Werte ja wieder da sein.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Ich hab den einfach nochmal hintendran gesetzt. Das Ergebnis ist dasselbe wie bei der application.undo-Methode. Das Problem taucht nur auf, wenn bei Kollegen in Spalte A (aktuelles Datum/Uhrzeit) was stehen bleibt (das Datum wird in A automatisch eingetragen, wenn in B, C oder D was eingegeben wird). Entfernt man die Eingaben in B:D wieder, verschwindet auch der eintrag in A. Leider kommt es vor, dass ich kontaktiert werde, weil die Fehlermeldung "Laufzeitfehler '1004' - Die Methode 'Undo' für das Objekt '_Application' ist fehlgeschlagen" ausgegeben wird. Hab's mal ausprobiert: Kann eigentlich nur passieren, wenn man in B:D statt eine Eingabe zu tätigen auf Entf drückt und dann A löscht oder man das Datum in A händisch eingibt und es dann wieder löscht. Ja, und wenn man alle Zellen beschrieben hat und dann nochmal was einträgt, habe ich gerade gemerkt.

Ich kann den Blattschutz nicht setzen, weil Excel die Tabellengröße dann nicht automatisch anpasst und bei unserem Excel(2016) funzen auch die von Kuwer in meinem Thread vom 20.10.21 vorgeschlagenen Resize-Codes nicht. Zuerst habe ich eine Formel in F geschrieben, aber da die nicht mit der Tabellengröße mitgeht, ist das nix.

Irgendwie gibt es einen Konflikt, den ich nicht aufgelöst kriege. Application.Undo soll ja in F nur starten, wenn man in F auf Entf drückt.

Ich hänge einfach mal die Datei an. Falls nix geht, kann man damit leben!

Vielleicht probiere ich, dass, sobald in A:D was steht, in F die Formel
Code:
=WENN(UND(ANZAHL2(A2:D2)<4;ANZAHLLEEREZELLEN(A2:D2)<=3);"Bitte alle Felder der Tabellenzeile ausfüllen!";"")
geschrieben wird? Stammt von Ralf A, meine war nicht ganz so elegant.

Gruß
Uwe


Angehängte Dateien
.xlsm   XXXcef.xlsm (Größe: 120,55 KB / Downloads: 3)
Antworten Top
#4
Oh Mann, ich muss natürlich den Code nochmal durchlaufen lassen wenn jemand in F was eingibt (bzw. Entf drückt)!

Ich dachte erst, alles ok. Leider dann - wieder beim Löschen von A, wenn nur in A was drinsteht - die Meldung "nicht genügend Stapelspeicher" und wenn ich dann auf Entf in Spalte F drücke "die Methode '_Default' für das Objekt 'Range' ist fehlgeschlagen" und Excel stürzt ab.

Code:
If Not Intersect(Target, Columns("F")) Is Nothing Then
    For Each rngZelle In Target
        If Range("A" & rngZelle.Row) <> "" And Range("B" & rngZelle.Row) <> "" And Range("C" & rngZelle.Row) <> "" _
            And Range("D" & rngZelle.Row) <> "" And Range("F" & rngZelle.Row) <> "" Then
            Range("F" & rngZelle.Row).ClearContents
        ElseIf Range("A" & rngZelle.Row) = "" And Range("B" & rngZelle.Row) = "" And Range("C" & rngZelle.Row) = "" _
            And Range("D" & rngZelle.Row) = "" And Range("F" & rngZelle.Row) <> "" Then
            Range("F" & rngZelle.Row).ClearContents
        ElseIf Range("F" & rngZelle.Row) = "" Then
            Range("F" & rngZelle.Row) = "Bitte alle Felder der Tabellenzeile ausfüllen!"
        End If
    Next rngZelle
End If
Antworten Top
#5
Hallo Uwe,

1. Undo funktioniert nur am Anfang, solange noch keine Zellbearbeitungen per VBA vorgenommen wurden. Also gehört das ganz nach oben nach Punkt 2 im Makro.
2. Es reicht, zu Beginn ein mal die Events auszuschalten. Schreibe also als erstes direkt nach den Deklarationen, und das nur da, die Zeilen
Code:
    On Error GoTo Fin
    Application.EnableEvents = False
Entferne alle weiteren Application.EnableEvents = True außer dem letzten nach der Sprungmarke.

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste