3
votes

I was hoping to find an excel vba that will loop through all sheets in a workbook and change the sheet color in the below order. 3, 5, 6, 12, 3, 5, 6, 12, 3, 5, 6, 12 ect repeating the pattern until it runs out of sheets. The below code work to change them on a random color but I need the above pattern.

Sub sbColorAllSheetTab()
'Declaration
Dim iCntr, sht
'This will hold the colorIndex number
iCntr = 2
'looping throgh the all the sheets of the workbook
For Each sht In ThisWorkbook.Worksheets
iCntr = iCntr + 1
'Applying the colors to Sheet tabs
sht.Tab.ColorIndex = iCntr
Next
End Sub

Any help would be great! ty!

3

3 Answers

5
votes

Try this:

Sub sbColorAllSheetTab()

    Dim iCntr, sht, arrColors, numColors

    arrColors = Array(3, 5, 6, 12) '<< array of color indexes

    iCntr = 0
    numColors = UBound(arrColors) + 1 '<< how many colors?

    For Each sht In ThisWorkbook.Worksheets
        sht.Tab.ColorIndex = arrColors((iCntr Mod 4)) '<< use Mod to cycle color
        iCntr = iCntr + 1
    Next

End Sub
2
votes

Use an array and index through it

Sub sbColorAllSheetTab()
    Dim iCntr As Long, sht As Worksheet, arr
    arr = Array(3, 5, 6, 12, ...) ' any sequence

    For Each sht In ThisWorkbook.Worksheets
        sht.Tab.ColorIndex = arr(iCntr)
        iCntr = (iCntr + 1) Mod (UBound(arr) + 1)
    Next
End Sub
1
votes

Let me know what do you thing about this.

Sub sbColorAllSheetTab()
Dim shtMod As Byte
'looping throgh the all the sheets of the workbook
For Each sht In ThisWorkbook.Worksheets
    shtMod = sht.Index Mod 4
    Select Case shtMod
        Case 1
            sht.Tab.ColorIndex = 3
        Case 2
            sht.Tab.ColorIndex = 5
        Case 3
            sht.Tab.ColorIndex = 6
        Case 0
            sht.Tab.ColorIndex = 12
    End Select
    Next
End Sub