Bug in Excel Makro

Liebe Experten,

für die ausschließliche Eingabe der Zeichen A – E in ein Excel 2003 Tabellenblatt, nutze ich folgendes kleines Makro:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim Text4 As String
Dim Text5 As String
Dim Text6 As String
Text1 = „es sind nur folgende Eingaben möglich:“
Text2 = „A, B, C, D oder E“
Text3 = „das sollte nicht passieren,“
Text4 = „es trat ein Fehler auf!“
Text5 = „Bitte prüfen Sie Ihre letzten Eingaben und wiederholen“
Text6 = „Sie sie gegebenenfalls noch einmal Schritt für Schritt.“

On Error GoTo Fehler

Dim rngZelle As Range
Dim rngBereich As Range
Set rngZelle = Intersect(Target, Range(„A1:stuck_out_tongue:60“))
If Not rngZelle Is Nothing Then
Application.EnableEvents = False
Select Case Target.Value
Case „a“ , „A“
Target.Value = „A“
Case „b“ , „B“
Target.Value = „B“
Case „c“ , „C“
Target.Value = „C“
Case „d“ , „D“
Target.Value = „D“
Case „e“ , „E“
Target.Value = „E“
Case „“
Target.Value = „“
Case Else
Application.Undo
MsgBox Text1 & vbLf & Text2, vbInformation, „sorry,“
End Select
Application.EnableEvents = True
End If

Exit Sub
Fehler:
MsgBox Text3 & vbLf & Text4 & vbLf & Text5 & vbLf & Text6, vbCritical, „Entschuldigung,“
Application.Undo

End Sub

Das funktioniert soweit zufriedenstellend, bis auf zwei Bugs:

  1. markiert ein Nutzer mehrere Zellen und versucht die Daten zu löschen, gibt es eine Fehlermeldung.
    Dies fange ich mit „Application.Undo“ ab. Finde es aber insgesamt etwas unbefriedigend, dass es überhaupt zu einem Fehler kommt.

  2. Nach Ausführung von „Application.Undo“ kann man in die Zellen schreiben was man will. Die ausschließliche Eingabe der Zeichen A – D ist nicht mehr gültig.

Hat jemand eine gute Idee, wie man die beiden Probleme lösen kann?

Danke im Voraus

Jorma

warum nicht Gültigkeitsprüfung?
Hallo Jorma,
gibt es einen bestimmten Grund, warum Du die korrekte Befüllung der Zellen nicht mit der eingebauten Excel-Gültigkeitsprüfung realisieren willst?
Freundliche Grüße
Thomas

Hallo Thomas,
ja, einen Grund gibt es.
Bei der Gültigkeitsprüfung hat man immer automatisch ein DropDown Feld.
Aus bestimmten Gründen ist das nicht erwünscht.
v. Grüße,
Jorma

Bei der Gültigkeitsprüfung hat man immer automatisch ein
DropDown Feld.

Nein, das stimmt nicht.
Das DropDown Feld kannst du im Menü abschalten.

Gruß Holger

Hallo Jorma,

wenn du die Gültigkeitsprüfung nicht umstellen möchtest, z.B. wegen automatischer Ändrung in Großbuchstaben, dann muss du dein Makro wie folgt anpassen.

Alle momentan selektierten Zellen werden dann in einer Schleife einzeln geprüft.
Die Ereignismakros werden auch nach einem Fehler wieder aktiviert.

Die Case-Anweisungen hab ich etwas modifiziert.
Ebenso das Füllen der Variablen für die Meldungstexte - hier nur noch 2 Variablen.

Gruß
Franz

Private Sub Worksheet\_Change(ByVal Target As Range)

 Dim Text1 As String
 Dim Text3 As String
 Text1 = "es sind nur folgende Eingaben möglich:"
 Text1 = Text1 & vbLf & "A, B, C, D oder E"

 Text3 = "das sollte nicht passieren,"
 Text3 = Text3 & vbLf & "es trat ein Fehler auf!"
 Text3 = Text3 & vbLf & "Bitte prüfen Sie Ihre letzten Eingaben und wiederholen"
 Text3 = Text3 & vbLf & "Sie sie gegebenenfalls noch einmal Schritt für Schritt."

 On Error GoTo Fehler

 Dim rngZelle As Range, rngZellen As Range
 Set rngZellen = Intersect(Target, Range("A1:stuck\_out\_tongue:60"))

 If Not rngZellen Is Nothing Then
 Application.EnableEvents = False
 For Each rngZelle In rngZellen.Cells
 Select Case rngZelle.Value
 Case "A", "B", "C", "D", "E"
 'Eingabe OK
 Case "a", "b", "c", "d", "e"
 rngZelle.Value = UCase(rngZelle.Value)
 Case ""
 'Eingabe wurde gelöscht
 Case Else
 Application.Undo
 MsgBox Text1, vbInformation, "sorry,"
 End Select
 Next rngZelle
 Application.EnableEvents = True
 End If
 Exit Sub
Fehler:
 MsgBox "Fehler-Nr.: " & Err.Number & vbLf & Err.Description \_
 & vbLf & vbLf & Text3, vbCritical, "Entschuldigung,"
 Application.EnableEvents = True
End Sub

Hallo Holger,
hallo Franz,

ganz herzlichen Dank für eure Bemühungen,
damit konntet ihr mein Problem lösen.

Jorma