Workbook SheetChange Anpassungen in VBA
Schritt-für-Schritt-Anleitung
Um den Workbook_SheetChange
-Ereignis in Excel VBA so anzupassen, dass nur bestimmte Tabellen formatiert werden, kannst du folgenden Code verwenden. Der Code wird in das "ThisWorkbook"-Modul deiner Excel-Datei eingefügt.
- Öffne die Excel-Datei und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Suche das Modul "ThisWorkbook" im Projekt-Explorer.
- Füge den folgenden Code ein:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim myTables As String
' Liste aller zugelassenen Tabellen
myTables = "*Tabelle1*Tabelle3*Tabelle8*"
If InStr(1, myTables, "*" & Sh.Name & "*", vbTextCompare) = 0 Then
Exit Sub
End If
Dim lngS As Long, arrA, rngA As Range, rngC As Range, aa As Long
With Sheets("Legende")
If .Name = Sh.Name Then Exit Sub
lngS = .Cells(.Rows.Count, 1).End(xlUp).Row
arrA = Application.Transpose(.Cells(2, 1).Resize(lngS))
End With
For Each rngA In Target.Areas
For Each rngC In rngA
If Not IsEmpty(rngC) Then
For aa = 1 To UBound(arrA) Step 2
If IsError(rngC) And Not IsError(arrA(aa)) Then
ElseIf Not IsError(rngC) And IsError(arrA(aa)) Then
ElseIf rngC = arrA(aa) Then
With Sheets("Legende").Cells(aa + 1, 2)
rngC.NumberFormat = .NumberFormat
rngC.Font.ColorIndex = .Font.ColorIndex
With .Interior
rngC.Interior.ColorIndex = .ColorIndex
rngC.Interior.Pattern = .Pattern
rngC.Interior.PatternColorIndex = .PatternColorIndex
End With
With .Borders
rngC.Borders.Weight = .Weight
rngC.Borders.ColorIndex = .ColorIndex
rngC.Borders.LineStyle = .LineStyle
End With
End With
Exit For
End If
Next aa
End If
If aa = 0 Or aa > UBound(arrA) Then
With rngC
.NumberFormat = "General"
.Font.ColorIndex = xlColorIndexAutomatic
With .Interior
.ColorIndex = xlColorIndexAutomatic
.Pattern = xlPatternNone
End With
.Borders.LineStyle = xlLineStyleNone
End With
End If
Next rngC
Next rngA
End Sub
Häufige Fehler und Lösungen
Alternative Methoden
Wenn du eine einfachere Lösung suchst, kannst du auch den Worksheet_Change
-Ereignis in den spezifischen Tabellenblättern verwenden, anstatt den Workbook_SheetChange
. Dies erfordert jedoch, dass du den Code in jedes relevante Tabellenblatt einfügst.
Private Sub Worksheet_Change(ByVal Target As Range)
' Dein Code hier für spezifische Tabellen
End Sub
Praktische Beispiele
Angenommen, du möchtest nur die Tabellen "Tabelle1", "Tabelle3" und "Tabelle8" formatieren. Der oben gezeigte Code erfüllt genau diese Anforderung. Teste den Code, indem du Daten in diesen Tabellen änderst und beobachte die Formatierungseffekte.
Tipps für Profis
-
Verwende Application.EnableEvents = False
am Anfang deines Codes, um rekursive Aufrufe des SheetChange
-Ereignisses zu vermeiden. Vergiss nicht, es am Ende wieder auf True
zu setzen.
-
Halte deine VBA-Projekte modular, indem du häufig verwendete Funktionen in separate Module auslagerst.
FAQ: Häufige Fragen
1. Wie kann ich mehr Tabellen zur Formatierung hinzufügen?
Füge einfach die Namen der zusätzlichen Tabellen zu der myTables
-Variablen hinzu, indem du sie im gleichen Format wie die bestehenden Namen anfügst.
2. Was passiert, wenn ich den Code in einer älteren Excel-Version verwende?
Die meisten Funktionen sollten auch in älteren Versionen von Excel funktionieren, jedoch kann die Unterstützung für bestimmte VBA-Funktionen variieren.
3. Wie kann ich sicherstellen, dass der Code nicht auf leeren Zellen reagiert?
Der Code überprüft bereits, ob die Zelle leer ist, bevor er eine Formatierung anwendet.