Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bedingtform. ListObjects -> Spaltenname

Bedingtform. ListObjects -> Spaltenname
04.01.2023 08:50:26
Mathias
Hallo an alle
Es wäre sehr nett wenn mir jemand weiterhelfen könnte. Ich möchte bedinget Formatierungen über VBA setzen das funktioniert auch gut der CodE wird bei jedem speichern ausgeführt aber.
Ist es möglich über den Spalten Namen (also die Überschrift wie zbsp Datum) einer Tabelle(ListObjects) bedingt zu formatieren. Im Moment mache ich es über die Nummer der Spalte. Nur leider werden immer wieder Spalten in ihrer Position innerhalb der Tabelle durch meinen Chef aus Bequemlichkeit verschoben oder Leerzeilen über der Tabelle eingefügt. Ich darf die Tabelle allerdings nicht Sperren.
so mache ich es im derzeit:

   ActiveSheet.Cells.FormatConditions.Delete
With wsAktiv.ListObjects(1).ListColumns(12)
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($L2)=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.799981688894314
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
With wsAktiv.ListObjects(1).ListColumns(13)
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($M2)=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.799981688894314
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
Vielen dank an jeden der mir Antwort
Beste Grüße
Mathias
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingtform. ListObjects -> Spaltenname
04.01.2023 09:41:01
ChrisL
Hi Mathias

With wsAktiv.ListObjects(1).ListColumns("Datum")
cu
Chris
AW: Bedingtform. ListObjects -> Spaltenname
04.01.2023 10:51:46
Mathias
Hallo Chris :)
Vielen Dank, das war jetzt super schnell und einfach. Hab den Code entsprechend geändert und es funktioniert. Wüsstest du ev. wie ich an den Buchstaben der jeweiligen Spalte komme. Um die Formel der bedingten Formatierung auch flexibel zu machen, wenn jemand die Spaltenreihenfolge ändert dann passt der Buchstabe in der Formel nicht mehr.
So schaut der Code jetzt aus:

    wsAktiv.Cells.FormatConditions.Delete
ez = wsAktiv.ListObjects(1).Range.Cells(1, 1).Row 'erste Zeile finden
On Error Resume Next
With wsAktiv.ListObjects(1) '.Select
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$O" & ez + 1 & "=""X"""
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Font
.Strikethrough = True
.Color = -16777024
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
With wsAktiv.ListObjects(1).ListColumns("Mitarbeiter")
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($P" & ez + 1 & ")=FALSCH"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Font
.Strikethrough = True
.Color = -11489280
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($A" & ez + 1 & ")=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13434879
.TintAndShade = 0
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
With wsAktiv.ListObjects(1).ListColumns("Datum")
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($W" & ez + 1 & ")=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13434879
.TintAndShade = 0
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
With wsAktiv.ListObjects(1).ListColumns("Uhrzeit")
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($S" & ez + 1 & ")=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13434879
.TintAndShade = 0
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
End Sub
Gibt es eigentlich eine einfachere Schreibweise im VBA für die bedingten Formatierungen oder geht es nur so.
Danke für die Hilfe
Grüße Mathias
Anzeige
AW: Bedingtform. ListObjects -> Spaltenname
04.01.2023 11:36:15
ChrisL
Hi

With wsAktiv.ListObjects(1).ListColumns("Mitarbeiter")
MsgBox "Spalte: " & Split(.Range.Address, "$")(1)
End With
cu
Chris
Geslöst-Bedingtform. ListObjects -> Spaltenname
04.01.2023 13:48:58
Mathias
Spitze :)))) es funktioniert.
@Chris vielen dank für deine Hilfe
Die Spalten können von ihrer Position in der Tabelle ohne Probleme innerhalb der Schnellformattabelle vertauscht werden. Es können auch beliebig viele Leerzeilen über der Tabelle eingesetzt werden.
Sollte jemand noch einen Verbesserungsvorschlag haben dann nur her damit aber im Prinzip funktioniert es. Nochmal Großes DANKE an Chris

Sub Bedingte_Formatierung_Flexibel()
Dim  ez As String
Dim wsAktiv As Worksheet
Set wsAktiv = ThisWorkbook.ActiveSheet
ez = wsAktiv.ListObjects(1).Range.Cells(1, 1).Row 'Nr der Überschrieftenzeile
On Error Resume Next
wsAktiv.Cells.FormatConditions.Delete
'Variante 1 Spalten Deklaration in Formel------------------------------------------------
With wsAktiv.ListObjects(1)
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$" & Split(wsAktiv.ListObjects(1).ListColumns("Gebucht").Range.Address, "$")(1) & ez + 1 & "=""X"""
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Font
.Strikethrough = True
.Color = -16777024
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
'Variante 2 Spalten Deklaration in With Anweisung---------------------------------------------------
With wsAktiv.ListObjects(1).ListColumns("Datum")
.DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($" & Split(.Range.Address, "$")(1) & ez + 1 & ")=WAHR"
.DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
With .DataBodyRange.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13434879
.TintAndShade = 0
End With
.DataBodyRange.FormatConditions(1).StopIfTrue = False
End With
End Sub
Beste Grüße
Mathias
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Bedingte Formatierungen in Excel mit VBA über Spaltennamen


Schritt-für-Schritt-Anleitung

Um bedingte Formatierungen in Excel über die Spaltennamen einer Tabelle (ListObjects) zu setzen, kannst du den folgenden VBA-Code verwenden:

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf „VBAProject“ > Einfügen > Modul).
  3. Kopiere und füge den folgenden Code ein:
Sub Bedingte_Formatierung_Flexibel()
    Dim ez As Long
    Dim wsAktiv As Worksheet
    Set wsAktiv = ThisWorkbook.ActiveSheet
    ez = wsAktiv.ListObjects(1).Range.Cells(1, 1).Row 'Nr der Überschriftenzeile
    On Error Resume Next
    wsAktiv.Cells.FormatConditions.Delete

    With wsAktiv.ListObjects(1).ListColumns("Datum")
        .DataBodyRange.FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($" & Split(.Range.Address, "$")(1) & ez + 1 & ")=WAHR"
        .DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).SetFirstPriority
        With .DataBodyRange.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 13434879
            .TintAndShade = 0
        End With
        .DataBodyRange.FormatConditions(1).StopIfTrue = False
    End With
End Sub
  1. Passe den Code an: Ersetze "Datum" mit dem Namen der gewünschten Spalte.
  2. Führe das Makro aus (F5), um die bedingte Formatierung anzuwenden.

Häufige Fehler und Lösungen

  • Fehler: „Subscript out of range“

    • Ursache: Der angegebene Spaltenname existiert nicht in der Tabelle.
    • Lösung: Überprüfe den Spaltennamen auf Tippfehler oder stelle sicher, dass die Spalte vorhanden ist.
  • Fehler: „FormatConditions.Delete“ funktioniert nicht

    • Ursache: Das Arbeitsblatt ist möglicherweise geschützt.
    • Lösung: Stelle sicher, dass das Arbeitsblatt nicht geschützt ist. Du kannst den Schutz mit wsAktiv.Unprotect aufheben.

Alternative Methoden

  • Direkte Zellenreferenz: Anstatt über den Spaltennamen zu arbeiten, kannst du die Zellenreferenz verwenden:
With wsAktiv.Cells(2, 3) ' Zelle in Zeile 2, Spalte 3
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ISTLEER($C2)=WAHR"
End With
  • Verwendung von Named Ranges: Definiere benannte Bereiche für deine Spalten, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.

Praktische Beispiele

Hier sind einige weitere praktische Beispiele für bedingte Formatierungen in Excel:

  1. Färbe Zellen rot, wenn der Wert kleiner als 10 ist:
With wsAktiv.ListObjects(1).ListColumns("Wert")
    .DataBodyRange.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:=10
    .DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).Interior.Color = RGB(255, 0, 0)
End With
  1. Füge eine Strichlinie hinzu, wenn der Text „Erledigt“ ist:
With wsAktiv.ListObjects(1).ListColumns("Status")
    .DataBodyRange.FormatConditions.Add Type:=xlTextString, String:="Erledigt"
    .DataBodyRange.FormatConditions(.DataBodyRange.FormatConditions.Count).Font.Strikethrough = True
End With

Tipps für Profis

  • Verwende With-Anweisungen: Dies vereinfacht den Code und macht ihn lesbarer.
  • Fehlerbehandlung: Nutze On Error Resume Next, um Fehler im Code elegant zu handhaben.
  • Dokumentation: Kommentiere deinen Code, um zu erklären, was jede Zeile macht. Dies ist besonders hilfreich, wenn du oder jemand anderes den Code in der Zukunft ändert.

FAQ: Häufige Fragen

1. Kann ich bedingte Formatierungen auch in einer anderen Excel-Version verwenden? Ja, die beschriebenen Methoden funktionieren in Excel 2010 und höheren Versionen.

2. Wie kann ich die Farbwerte in der bedingten Formatierung anpassen? Du kannst die RGB-Funktion verwenden, um benutzerdefinierte Farben festzulegen, z.B. RGB(255, 255, 0) für Gelb.

3. Was mache ich, wenn die bedingte Formatierung nicht angewendet wird? Überprüfe, ob der Code korrekt ausgeführt wurde und ob die entsprechenden Daten in der Tabelle vorhanden sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige