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.
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:
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
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
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
Mahlzeit!
Bei mir wird der Code ordentlich ausgeführt, es kommen farbige Kästchen
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.