makro w excelu - kod z "For each ..." nie działa a bez "for each.." działa

0

Witam.
Mam pewien orzech do zgryzienia.
W pliku excela 2010 jest 12 arkuszy z nazwami miesięcy i jeden ukryty.
W tym ukrytym mam buttona który ma poniższy kod.
Gdy wyrzuce z kodu "For Each sheet..." i dam pętle w każdy arkusz oddzielnie to działa.
Ale używając "For each ...." już nie. Gdzie popełniam błąd ?

 
Public Sub koloruj()
Worksheets("Styczeń").Protect userinterfaceonly:=True
Worksheets("Luty").Protect userinterfaceonly:=True
Worksheets("Marzec").Protect userinterfaceonly:=True
Worksheets("Kwiecień").Protect userinterfaceonly:=True
Worksheets("Maj").Protect userinterfaceonly:=True
Worksheets("Czerwiec").Protect userinterfaceonly:=True
Worksheets("Lipiec").Protect userinterfaceonly:=True
Worksheets("Sierpień").Protect userinterfaceonly:=True
Worksheets("Wrzesień").Protect userinterfaceonly:=True
Worksheets("Październik").Protect userinterfaceonly:=True
Worksheets("Listopad").Protect userinterfaceonly:=True
Worksheets("Grudzień").Protect userinterfaceonly:=True

Dim i As Long
Dim j As Long
Dim sht As Worksheet



For Each sht In Sheets
Application.ScreenUpdating = False


    For i = 4 To 34
        If Cells("4", i).Value = "So" Then
            For j = 5 To 400
       Cells(j, i).Interior.ColorIndex = 15
       Next j
        End If
        
       If Cells("4", i).Value = "N" Then
            For j = 5 To 400
       Cells(j, i).Interior.ColorIndex = 15
       Next j
        End If
        
        If Cells("4", i).Value = "X" Then
            For j = 5 To 400
       Cells(j, i).Interior.ColorIndex = 15
       Next j
        End If
        
        Next i



Application.ScreenUpdating = True
Next sht

Worksheets("Styczeń").Protect userinterfaceonly:=False
Worksheets("Luty").Protect userinterfaceonly:=False
Worksheets("Marzec").Protect userinterfaceonly:=False
Worksheets("Kwiecień").Protect userinterfaceonly:=False
Worksheets("Maj").Protect userinterfaceonly:=False
Worksheets("Czerwiec").Protect userinterfaceonly:=False
Worksheets("Lipiec").Protect userinterfaceonly:=False
Worksheets("Sierpień").Protect userinterfaceonly:=False
Worksheets("Wrzesień").Protect userinterfaceonly:=False
Worksheets("Październik").Protect userinterfaceonly:=False
Worksheets("Listopad").Protect userinterfaceonly:=False
Worksheets("Grudzień").Protect userinterfaceonly:=False

End Sub
0

Zamień linijkę z foreachem na:

For Each sht In ActiveWorkbook.Worksheets
0

Zrobiłem tak jak napisałeś.
Nie koloruje nadal ;/
Ekran miga więc znaczy że coś tam robi w tle... ale nie to co powinien :P
Może to nie w tym problem...
Jak wklejałem tą część poniżej w każdy arkusz oddzielnie to działało pięknie. A jak chce dla wszystkich arkuszy za jednym razem to lipa.

Application.ScreenUpdating = False


    For i = 4 To 34
        If Cells("4", i).Value = "So" Then
            For j = 5 To 400
            Cells(j, i).Interior.ColorIndex = 15
            Next j
        End If
        
        If Cells("4", i).Value = "N" Then
            For j = 5 To 400
            Cells(j, i).Interior.ColorIndex = 15
            Next j
        End If
        
        If Cells("4", i).Value = "X" Then
            For j = 5 To 400
            Cells(j, i).Interior.ColorIndex = 15
             Next j
        End If
        
    Next i



Application.ScreenUpdating = True
0

Ekran miga więc znaczy że coś tam robi w tle... ale nie to co powinien :P

W takim razie powiedz, co chcesz uzyskać, i co się dzieje, że wynik ci nie odpowiada?

Odpaliłam u siebie z pominięciem tych linii:

Worksheets("Styczeń").Protect userinterfaceonly:=True
Worksheets("Luty").Protect userinterfaceonly:=True
Worksheets("Marzec").Protect userinterfaceonly:=True

...i pokolorowało wg mnie tak jak trzeba.

0

Mogę plik przesłać bo mnie na prawdę nie pokolorowało...

EDIT:
dodałem załącznik

0

Nie mogłem wcześniej odpisać gdyż był weekend a wszystkie pliki mam w pracy.

Dodaję plik w formacie XLS.
Część funkcji nie będzie dostępna...

1 użytkowników online, w tym zalogowanych: 0, gości: 1