Shapes ansprechen mit VBA in Excel
Schritt-für-Schritt-Anleitung
Um Shapes in Excel mit VBA anzusprechen und deren Farbe basierend auf Werten zu ändern, folge diesen Schritten:
-
Shapes einfügen: Füge die gewünschten Shapes (z.B. Freeform) in ein Arbeitsblatt ein. Du kannst die Shapes über das Menü Einfügen
> Formen
> Freihandform
hinzufügen.
-
VBA-Editor öffnen: Drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Neues Modul erstellen: Klicke mit der rechten Maustaste im Projektfenster und wähle Einfügen
> Modul
.
-
Code eingeben: Füge den folgenden Code in das Modul ein:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target.Cells(1), Range("D3:D28")) Is Nothing Then
ActiveSheet.Shapes(Target.Offset(0, -1).Value).Fill.ForeColor.RGB = fctFarbe(Target.Value)
End If
End Sub
Private Function fctFarbe(dblWert As Double) As Long
If dblWert >= 900000 Then
fctFarbe = RGB(70, 169, 180)
ElseIf dblWert >= 250000 Then
fctFarbe = RGB(121, 186, 196)
ElseIf dblWert >= 100000 Then
fctFarbe = RGB(162, 205, 200)
ElseIf dblWert >= 35000 Then
fctFarbe = RGB(198, 223, 222)
ElseIf dblWert >= 10000 Then
fctFarbe = RGB(228, 239, 242)
Else
fctFarbe = RGB(255, 255, 255)
End If
End Function
-
Daten eingeben: Trage Werte in die Zellen D3 bis D28 ein. Die entsprechenden Shapes sollten sich farblich ändern, basierend auf den definierten RGB-Werten.
Häufige Fehler und Lösungen
- Shapes werden nicht gefunden: Stelle sicher, dass die Shape-Namen korrekt sind. Du kannst die Namen im Auswahlbereich von Excel überprüfen.
- Farbe ändert sich nicht: Überprüfe, ob die Formel in den Zellen korrekt ist. Die Funktion
Worksheet_Change
wird nur ausgelöst, wenn du die Werte manuell eingibst.
- RGB-Farbe funktioniert nicht: Achte darauf, dass die RGB-Werte korrekt definiert sind. Verwende die Funktion
RGB()
für die Farbcodes.
Alternative Methoden
Eine vereinfachte Methode zur Farbzuweisung, ohne Shapes zu selektieren:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target.Cells(1), Range("D3:D28")) Is Nothing Then
ActiveSheet.Shapes(Target.Offset(0, -1).Value).Fill.ForeColor.RGB = fctFarbe(Target.Value)
End If
End Sub
Hier wird der Name des Shapes aus der benachbarten Spalte abgerufen, was den Code übersichtlicher macht.
Praktische Beispiele
-
Farben für Kantone: Erstelle eine Tabelle mit den Namen der Kantone und den entsprechenden Werten. Verwende den obigen VBA-Code, um die Shapes farblich zu markieren.
-
Regionale Einteilung: Du kannst die Shapes zusätzlich in regionale Gruppen einteilen und Farben zuweisen, indem du die Logik in der Funktion fctFarbe
erweiterst.
Tipps für Profis
- Nutze Freeform Shapes für komplexere Formen. Du kannst diese über
Einfügen
> Formen
> Freihandform
in dein Arbeitsblatt einfügen.
- Wenn du viele Shapes hast, kann es sinnvoll sein, die Shape-Namen in einer Tabelle zu dokumentieren, um die Übersichtlichkeit zu wahren.
- Experimentiere mit VBA-Arrays, um die Performance zu verbessern, wenn du viele Shapes gleichzeitig ansprechen möchtest.
FAQ: Häufige Fragen
1. Warum funktioniert mein Code nicht, wenn ich Formeln verwende?
Wenn du Werte aus einer anderen Tabelle über Formeln holst, wird das Change
-Ereignis nicht ausgelöst. Du musst sicherstellen, dass die Werte direkt eingegeben oder mit einem Makro aktualisiert werden.
2. Kann ich die Farben dynamisch ändern?
Ja, du kannst den Code so anpassen, dass die Farben bei jeder Änderung der Werte aktualisiert werden, indem du eine Schleife oder andere VBA-Techniken verwendest.
3. Wo finde ich die Shape-Namen?
Du kannst die Shape-Namen im Auswahlbereich von Excel einsehen. Alternativ kannst du den Namen auch direkt im VBA-Editor überprüfen.