Zellenformatierungen mittels VBA-Code

Guten Tag,

ich bin auf der Suche nach einen Code, der mir ermöglicht, je nach Eingabe das Feld farbig hinterlegt.
Zum Beispiel Eingabe „U“ in einer Zelle. Excel soll nun diese Zelle blau markieren. Bei „k“ rot u.s.w. Mit Bedingungen geht es nicht, da ich mehrere Möglichkeiten brauche. Im Anhang findest du „meinen Code“.

Private Sub Worksheet_Change(ByVal Target As Range)
With Target.Interior
Select Case UCase(Target)
Case „K“
.ColorIndex = 3
Case „U“
.ColorIndex = 33
Case „AF“
.ColorIndex = 27
Case „KUG“
.ColorIndex = 7
Case „DR“
.ColorIndex = 19
Case „S“
.ColorIndex = 50
Case „BF“
.ColorIndex = 4
Case „“
.ColorIndex = 0
Case Else
End Select
End With
End Sub

Habe jetzt folgendes Problem, wenn ich mit der Maus mehrere Zeilen markiere und auf ENTF drücke, erscheint folgende Fehlermeldung:

Laufzeitfehler 13
Typen unverträglich
beim debuggen ist folgende Zeile farbig hinterlegt
Select Case UCase(Target)

Was kann ich tun, oder wie muss der Befehl geschrieben werden, damit dies funktioniert.

VIELEN DANK für eure Bemühungen

Gruß Stefan

Guten Tag,

ich bin auf der Suche nach einen Code, der mir ermöglicht, je
nach Eingabe das Feld farbig hinterlegt.
Zum Beispiel Eingabe „U“ in einer Zelle. Excel soll nun diese
Zelle blau markieren. Bei „k“ rot u.s.w. Mit Bedingungen geht
es nicht, da ich mehrere Möglichkeiten brauche. Im Anhang
findest du „meinen Code“.

Private Sub Worksheet_Change(ByVal Target As Range)
With Target.Interior
Select Case UCase(Target)

Hallo,
du kannst ein Range Object (Target) nicht behandeln, asl wäre es ein String (UCASE(Target)).

Du musst auf den konkreten Value zugreifen, etwa so:

UCase(Range(„A5“).Value)

HTH,
fkel

Sorry aber da kann ich leider nicht helfen edgar

Hallo Stefan,

ich hab den Code bei mir mal kurz eingegeben. Aber mir fällt derzeit auch nichts ein. Wenn doch, melde ich mich noch einaml.

Gruß
Michael

Erst mal Vielen Dank für deine Hilfe,

ich habe jetzt die zweite Zeile umgeschrieben

Select Case UCase(Range(„A5“).Value)

Leider geht jetzt gar nichts mehr?

Bin ein absoluter Anfänger auf diesen Gebiet.
Vielleicht kannst du mir deine Lösung nochmals detailliert eintippen.
Vielen Dank für deine Bemühungen

Gruß Stefan

Hallo,

ein Range-Objekt KANN eine Zelle sein, muss aber nicht. Daher der Fehler, wenn MEHRERE Zellen markiert wurden. Um das abzufangen, muss vor Ausführung geprüft werden, wieviele Zellen betroffen sind. Hier mal meine Version, die unter Excel 2003 funktioniert:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long 'Zellen-Zähler

For i = 1 To Target.Count 'Schleife über Zellen
With Target.Interior
Select Case UCase(Target(i)) '!!! einzelne Zelle über Index in Range-Auflistung ansprechen !!!
Case „K“ ''Ab hier wie vorheriger Code …
.ColorIndex = 3
Case „U“
.ColorIndex = 33
Case „AF“
.ColorIndex = 27
Case „KUG“
.ColorIndex = 7
Case „DR“
.ColorIndex = 19
Case „S“
.ColorIndex = 50
Case „BF“
.ColorIndex = 4
Case „“
.ColorIndex = 0
Case Else
End Select
End With
Next i 'Und natürlich Schleifen-Ende nicht vergessen
End Sub

Gruß

Harry

Hallo Harry ,

vielen Dank für deine Hilfe. Da ich leider ihr nahezu null Ahnung habe bräuchte ich nochmals deine Hilfe.
Ich habe den Code wie folgt (siehe unten) eingetippt. Leider kommt jetzt, sobald ich einen Wert eintippe eine Fehlermeldung. Ich kann auch leider mit deine Info´s „einzelne Zellen über Index in Range- Auflistung“ nichts anfangen. Wie gesagt. absoluter Beginner:frowning:

Ich hoffe, du findest meinen Fehler.
Private Sub Worksheet_Change(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long
For i = 1 To Target.Count
With Target.Interior
Select Case UCase(Target(i))
Case „K“
.ColorIndex = 3
Case „U“
.ColorIndex = 33
Case „AF“
.ColorIndex = 27
Case „KUG“
.ColorIndex = 7
Case „DR“
.ColorIndex = 19
Case „S“
.ColorIndex = 50
Case „BF“
.ColorIndex = 4
Case „“
.ColorIndex = 0
Case Else
End Select
End With
Next i
End Sub

VIELEN DANK FÜR DEINE HILFE !!!

Hallo stefan,

der Fehler liegt in der ersten Zeile:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

muss sie lauten.

Workbook_SheetChange statt Worksheet_Change.

hier komplett:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Long
For i = 1 To Target.Count
With Target.Interior
Select Case UCase(Target(i))
Case „K“
.ColorIndex = 3
Case „U“
.ColorIndex = 33
Case „AF“
.ColorIndex = 27
Case „KUG“
.ColorIndex = 7
Case „DR“
.ColorIndex = 19
Case „S“
.ColorIndex = 50
Case „BF“
.ColorIndex = 4
Case „“
.ColorIndex = 0
Case Else
End Select
End With
Next i
End Sub

Gruß
Harry

Vielen DANK für deine Bemühungen.
Jetzt erscheint keine Fehlermeldung mehr! Aber leider wird die Eingabe auch nicht farbig geändert.

Wenn du Lust hast, kannst du ja nochmal rüberschauen.

Vielen DANK !!!

Mahlzeit!
Bei mir wird der Code ordentlich ausgeführt, es kommen farbige Kästchen :wink:

Wenn es bei Dir nicht läuft, gibt es mehrere Möglichkeiten. Momentan fallen mir ein:
a) Makro-Sicherheit zu hoch ?
Unter Extras\Makro\Sicherheit… mal die niedrigste Stufe einstellen.

b) Code an der richtigen Stelle ?
Der genannte Code MUSS im VBAProjekt unter „Diese Arbeitsmappe“. Er funktioniert NICHT in „TabelleX“ oder „ModulX“. Doppelklicke „Diese Arbeitsmappe“ im VBA-Fenster (Alt-F11), wähle aus der Dropdown-Liste in der Mitte (da steht „Allgemein“) das „Workbook“ aus, dann aus der rechten Liste „WorkbookSheetChange“. Da muss der Code hin. Das Workbook_Open-Code-Schnipselchen kannst Du löschen.

Hoffe es hilft.

Gruß
Harry