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

Forumthread: VBA-Code auf mehrere Sheets anwenden

VBA-Code auf mehrere Sheets anwenden
01.02.2020 07:16:34
AndyO
Hallo,
gegeben sei eine Arbeitsmappe mit einer Untermenge an Arbeitsblättern I, II,..,IX,X. Ich möchte jetzt auf jedem dieser Arbeitsblätter folgende Funktionen durchführen:
- nach Spalte B aufsteigend sortieren
- einheitliche Schriftfarbe schwarz
- einheitliche Füllfarbe weiß
Wie mache ich das in VBA am effizientesten?
MfG
AndyO
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 08:49:10
volti
Hallo Andy,
am besten nimmst Du Deine gewünschten Aktionen mit dem Recorder für ein Blatt auf und bereinigst anschließend das Ergebnis um überflüssigen Code. Insbesondere Select und Activate ist meistens unnötig.
Anschließend baust Du Dir eine Schleife (hier Worksheet-Schleife) um das Ergebnis.
Hier ein Beispiel:
Option Explicit
Sub Makro1()
 Dim WSh As Worksheet
 For Each WSh In ThisWorkbook.Worksheets
    WSh.sOrt.SortFields.Clear
    WSh.sOrt.SortFields.Add2 Key:=Range( _
        "B1:B132"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With WSh.sOrt
        .SetRange Range("B1:B132")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    With WSh.Cells.Font
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
    End With
    With WSh.Cells.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
 Next WSh
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 08:49:11
Hajo_Zi
Hallo Andy,
per VBA.
Benutze den Makrorecorder.

AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 10:09:11
Nepumuk
Hallo Andy,
teste mal:
Option Explicit

Public Sub Sortieren()
    
    Dim lngIndex As Long
    Dim objWorksheet As Worksheet
    
    For lngIndex = 1 To 10
        
        Set objWorksheet = ThisWorkbook.Worksheets(Application.Roman(lngIndex))
        
        With objWorksheet.Sort
            
            Call .SortFields.Clear
            Call .SortFields.Add(Key:=objWorksheet.Cells(1, 2), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal)
            Call .SetRange(Rng:=objWorksheet.UsedRange)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            Call .Apply
            
        End With
        
        With objWorksheet.UsedRange
            
            .Font.Color = vbBlack
            .Interior.Pattern = xlPatternNone
            
        End With
    Next
    
    Set objWorksheet = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 10:41:28
AndyO
@Nepumuk
du weißt offensichtlich was mir beim Sortieren noch fehlt. Hier mal mein Ansatz der mir kürzer erscheint:
Sub MehrereSheetsAnsprechen()
Dim MeineBlätter As Variant
'Liste meiner Arbeitsblätter
MeineBlätter = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X")
'Loop meiner Arbeitsblätter
For x = LBound(MeineBlätter) To UBound(MeineBlätter)
'Setze den Hintergrund auf Nichts zurück (.Cells = alle Zellen)
ThisWorkbook.Worksheets(MeineBlätter(x)).Cells.Interior.ColorIndex = xlNone
'Mach die Schrift schwarz (.Cells = alle Zellen)
ThisWorkbook.Worksheets(MeineBlätter(x)).Cells.Font.ColorIndex = 1
ThisWorkbook.Worksheets(MeineBlätter(x)).Range("A1:B11").Sort _
Key1:=Range("B"), Order1:=xlDescending, _
Header:=xlNo
Next x
End Sub

Das Sortieren funktioniert so leider nicht (Laufzeitfehler 1004, die Methode Range für das Objekt _Global ist fehlgeschlagen. Siehst du den Fehler?
Anzeige
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 10:52:50
Werner
Hallo,
so:
Sub MehrereSheetsAnsprechen()
Dim MeineBlätter As Variant
'Liste meiner Arbeitsblätter
MeineBlätter = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X")
'Loop meiner Arbeitsblätter
For x = LBound(MeineBlätter) To UBound(MeineBlätter)
'Setze den Hintergrund auf Nichts zurück (.Cells = alle Zellen)
With ThisWorkbook.Worksheets(MeineBlätter(x))
.Cells.Interior.ColorIndex = xlNone
'Mach die Schrift schwarz (.Cells = alle Zellen)
.Cells.Font.ColorIndex = 1
.Range("A1:B11").Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlNo
End With
Next x
End Sub
Gruß Werner
Anzeige
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 11:07:25
AndyO
Ich glaube was zu lernen.:) Laufzeitfehler ist weg, Hintergrundfarbe und Schriftfarbe werden wunschgemäß angepasst, nur das Sortieren wird ignoriert. Könntest du das noch mal Gegenprüfen?
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 11:13:26
AndyO
Mein Fehler! Geht! Danke!
MfG
AndyO
AW: VBA-Code auf mehrere Sheets anwenden
01.02.2020 11:31:34
AndyO
Wenn man weiß, wie es geht, ganz einfach. Hier mal mein finaler Code. Ich hab zumindest einiges draus gelernt.
Sub MehrereSheetsAnsprechen()
Dim MeineBlätter As Variant
'Liste meiner Arbeitsblätter
MeineBl?tter = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X")
'Loop meiner Arbeitsblätter
For x = LBound(MeineBlätter) To UBound(MeineBlätter)
With ThisWorkbook.Worksheets(MeineBlätter(x))
'Setze den Hintergrund auf Nichts zurück (.Cells = alle Zellen)
.Cells.Interior.ColorIndex = xlNone
'Mach die Schrift schwarz (.Cells = alle Zellen)
.Cells.Font.ColorIndex = 1
'Sortiere gesamtes Blatt aufsteigend nach Spalte B ab zweiter Zeile (Header:=xlYes)
.Cells.Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlYes
End With
Next x
End Sub

Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
01.02.2020 17:30:26
Werner
;
Anzeige
Anzeige

Infobox / Tutorial

VBA-Code auf mehrere Sheets anwenden


Schritt-für-Schritt-Anleitung

Um VBA-Code auf mehrere Sheets in Excel anzuwenden, folge dieser Schritt-für-Schritt-Anleitung:

  1. Öffne das Visual Basic for Applications (VBA) Fenster in Excel mit ALT + F11.
  2. Erstelle ein neues Modul, indem du im Projekt-Explorer mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ klickst und „Einfügen“ > „Modul“ wählst.
  3. Füge den folgenden Code in das Modul ein:
Sub MehrereSheetsAnsprechen()
    Dim MeineBlätter As Variant
    'Liste meiner Arbeitsblätter
    MeineBlätter = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X")

    'Loop meiner Arbeitsblätter
    For x = LBound(MeineBlätter) To UBound(MeineBlätter)
        With ThisWorkbook.Worksheets(MeineBlätter(x))
            'Setze den Hintergrund auf Nichts zurück
            .Cells.Interior.ColorIndex = xlNone
            'Mach die Schrift schwarz
            .Cells.Font.ColorIndex = 1
            'Sortiere das Blatt aufsteigend nach Spalte B
            .Cells.Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlYes
        End With
    Next x
End Sub
  1. Schließe das VBA-Fenster und kehre zu Excel zurück.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf „Ausführen“ klickst.

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Wenn dieser Fehler auftritt, kann es daran liegen, dass die Range nicht korrekt angegeben wurde. Stelle sicher, dass die Range in .Range("B2") korrekt ist und dass die Zielblätter existieren.

  • Sortieren wird ignoriert: Überprüfe, ob die Daten in der Spalte B korrekt formatiert sind. Wenn die Daten gemischte Datentypen enthalten, kann dies die Sortierung beeinflussen.


Alternative Methoden

Eine Alternative ist die Verwendung des Makrorecorders, um die gewünschten Aktionen auf einem Blatt aufzuzeichnen und den generierten Code anzupassen. Du kannst den Recorder wie folgt aktivieren:

  1. Gehe zu „Entwicklertools“ > „Makro aufzeichnen“.
  2. Führe die gewünschten Aktionen auf einem Blatt aus (z. B. Sortieren, Schriftfarbe ändern).
  3. Stoppe die Aufzeichnung und passe den Code an, um ihn auf mehrere Sheets anzuwenden.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du sheets vba und vba with sheets verwenden kannst:

Sub BeispielMitSortFields()
    Dim WSh As Worksheet
    For Each WSh In ThisWorkbook.Worksheets
        With WSh.Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=WSh.Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange WSh.UsedRange
            .Header = xlYes
            .Apply
        End With
    Next WSh
End Sub

Tipps für Profis

  • Nutze With Worksheets für eine bessere Lesbarkeit und weniger wiederholte Codezeilen.
  • Achte darauf, dass die Arbeitsblätter in der richtigen Reihenfolge in der Liste stehen, um die gewünschten Ergebnisse zu erzielen.
  • Wenn du viele sheets excel vba verwendest, überlege, ob du die Wiederverwendbarkeit deines Codes durch Subroutinen erhöhen kannst.

FAQ: Häufige Fragen

1. Wie kann ich den Code für eine andere Anzahl von Arbeitsblättern anpassen? Du kannst die Array-Liste in MeineBlätter ändern, um die gewünschten Blätter zu integrieren.

2. Was ist der Unterschied zwischen Worksheets und Sheets in VBA? Worksheets bezieht sich nur auf Arbeitsblätter, während Sheets auch Diagramme und andere Objekte umfasst. Verwende Worksheets, wenn du sicherstellen möchtest, dass nur Arbeitsblätter betroffen sind.

3. Wie kann ich den Code anpassen, um eine andere Sortierreihenfolge zu verwenden? Ändere den Parameter Order1:=xlAscending zu Order1:=xlDescending, um die Reihenfolge zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige