Sie explizit Code sollten. die Verwendung von Select
und ActiveWorksheet
vermeiden. verweisen Sie nicht ein Bereich ohne Angabe des Bogens vorne (auf dem Sie einen bestimmten Bereich verwenden möchten). Erlauben Sie VBA nicht, Annahmen für Sie zu treffen, sondern teilen Sie VBA mit, was Sie wollen. Sei genau.
Hier ist Ihr Code mit expliziten Referenzen umgeschrieben. Dies sollte dein Problem lösen.
Option Explicit
Sub forEachWs()
Dim ws As Worksheet
Dim wsSUM As Worksheet
Dim bolfound As Boolean
bolfound = False
For Each wsSUM In ThisWorkbook.Worksheets
If wsSUM.Name = "Summary" Then
bolfound = True
Exit For
End If
Next wsSUM
If bolfound = False Then
MsgBox "Couldn't find the summary sheet." & Chr(10) & "Aborting..."
Exit Sub
End If
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> wsSUM.Name Then
Call changecolormonths(ws, wsSUM)
ws.Activate
ws.Range("A2").Select
Else
Call changesummarycolor(wsSUM)
End If
Next ws
End Sub
'below code are meant for Sheets(1) to Sheets(12)
Sub changecolormonths(ws As Worksheet, wsSUM As Worksheet)
Dim headercolor As Long
Dim proccolor As Long
headercolor = wsSUM.Range("B24").Value
proccolor = wsSUM.Range("B25").Value
With ws
.Range("A1:H1,L8:M8,K16:M16,L32:N32,L40:N40").Interior.Pattern = xlSolid 'header,total color
.Range("A1:H1,L8:M8,K16:M16,L32:N32,L40:N40").Interior.ColorIndex = headercolor
.Range("A1:H1,L8:M8,K16:M16,L32:N32,L40:N40").Font.ColorIndex = 2
.Range("K9:K15,K33:K39").Interior.Pattern = xlSolid 'procedure
.Range("K9:K15,K33:K39").Interior.ColorIndex = proccolor
End With
End Sub
'below code are meant for Sheets(13)
Sub changesummarycolor(wsSUM As Worksheet)
Dim headercolor As Long
Dim proccolor As Long
With wsSUM
headercolor = .Range("B24").Value
proccolor = .Range("B25").Value
.Range("B4:N4 , A12: N12 , N5: N11").Interior.Pattern = xlSolid 'summary header,total color
.Range("B4:N4 , A12: N12 , N5: N11").Interior.ColorIndex = headercolor
.Range("B4: N4 , A12: N12 , N5: N11").Font.ColorIndex = 2 'summary procedure
.Range("A5:A11").Interior.Pattern = xlSolid
.Range("A5:A11").Interior.ColorIndex = proccolor
End With
End Sub
Beachten Sie, dass ich Ihre Excel-Datei nicht und kann daher nicht den obigen Code testen konnte. Ich habe es nur von oben aufgeschrieben. Daher könnte es notwendig sein, etwas zu optimieren. Die Änderungen waren jedoch minimal und ich bin mir ziemlich sicher, dass es wie geplant laufen sollte. Aber zögern Sie nicht, mir zu sagen, wenn etwas schief geht. :)
Jetzt, da Sie den Code geändert haben, macht mein Kommentar keinen Sinn. aber mit dem neuen Code aktivieren Sie Blatt 13 nicht, so dass es das letzte aktive Blatt verwendet, das 12 ist. –
Sie sollten das Blatt als Variable in den Unterordner 'changesummarycolor' übergeben und die gesamte Aktivierung vermeiden. –
x = 13 wegen der 'for' Schleife. Das nächste x nach 12 ist 13 und die Schleife endet. Aber selbst wenn x 13 ist, lief der Code innerhalb der Schleife nicht für x = 13 (nur für x von 1 bis 12). Am einfachsten ist es, ein 'thisworkbook.Sheets (13) .activate 'vor dem Aufruf von' oldesummarycolor' hinzuzufügen, auch wenn ich nicht mit der Übersteuerung von 'select' oder' activate' arbeite. –