Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Workbook SheetChange Änderung

Workbook SheetChange Änderung
amintire
Hallo, hat evtl jemand eine Lösung für mich diesen Code umzubauen. Momentan funktioniert der so dass alle Mappen in der Datei mit dem Format ausgelöst werden. Es müsste allerdings ausgesuchte Tabellen sein.
Also z.B. Tabelle 1 und 3 und 8 wird mit dem Code formatiert... alle anderen Tabellen bleben ausgeschlossen.
Der Code:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
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               ' Zahlenformat
rngC.Font.ColorIndex = .Font.ColorIndex         ' Schriftfarbe
With .Interior                                  ' Hintergrund
rngC.Interior.ColorIndex = .ColorIndex
rngC.Interior.Pattern = .Pattern     ' Muster
rngC.Interior.PatternColorIndex = .PatternColorIndex
End With
With .Borders                                   ' Rahmen
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"                       ' Zahlenformat
.Font.ColorIndex = xlColorIndexAutomatic        ' Schriftfarbe
With .Interior                                  ' Hintergrund
.ColorIndex = xlColorIndexAutomatic
.Pattern = xlPatternNone             ' Muster
End With
.Borders.LineStyle = xlLineStyleNone            ' Rahmen
End With
End If
Next rngC
Next rngA
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Workbook SheetChange Änderung
22.09.2009 22:02:43
Luschi
Hallo amintire,
füge am Anfang folgenden Vba-Code hinzu:

Dim myTables As String
'Liste aller zugelassenen Tabellen
'warum die Sternchen - damit Tabelle1 und Tabelle11 unterscheibar sind
myTables = "*Tabelle1*Tabelle3*Tabelle8*"
If InStr(1, myTables, "*" & Sh.Name & "*", vbTextCompare) = 0 Then
Exit Sub
End If
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Workbook SheetChange Änderung
22.09.2009 22:29:15
amintire
Wo genau am Anfang?
Vor dem Code
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
oder danach?
Gruß amintire
AW: erledigt...
22.09.2009 22:50:03
amintire
erledigt...
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

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.

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Suche das Modul "ThisWorkbook" im Projekt-Explorer.
  3. 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

  • Fehler: Run-time error '1004': Application-defined or object-defined error

    • Lösung: Überprüfe, ob die angegebenen Tabellennamen exakt mit den Namen in deiner Arbeitsmappe übereinstimmen.
  • Fehler: Änderungen werden nicht erkannt.

    • Lösung: Stelle sicher, dass das Workbook_SheetChange-Ereignis richtig im "ThisWorkbook"-Modul platziert ist.

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.

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