2017-02-06 4 views
1

Код, приведенный ниже, не дает ошибок, но это не делает то, что я хочу, и я не уверен, что я делаю неправильно.Форматирование определенного набора ячеек на всех листах

Целью кода является добавление формул в конкретные ячейки во всех листах на основе критериев на каждом листе. Эта часть формул работает отлично (если ее можно сделать короче, то это будет бонус). Часть, которая не работает должным образом, является частью форматирования кода. Я хочу, чтобы определенное форматирование происходило на всех листах, но это происходит только на первом «сводном» листе.

Как я уже упоминал ранее, сообщений об ошибках нет, он проходит через штраф, но только изменяет форматирование ячеек в Сводном листе, а не на всех листах.

Любые советы были бы оценены :)

Sub Summary() 

    Dim wb1 As Workbook 
    Dim Sht As Worksheet 
    Dim Rng, Rng2 As Range 
    Dim cell As Range 
    Dim ws As Worksheet 

    Set wb1 = ThisWorkbook 
    Set Sht = wb1.Worksheets("Summary") 
    Set Rng = Sht.Range("A6:A" & Sht.Cells(Sht.Rows.Count, "A").End(xlUp).Row) 

    For Each cell In Rng 
     Set ws = wb1.Sheets(cell.Text) 
     Select Case ws.Range("A4").Value 
       Case "Standard Kitchen Template" 
       ws.Range("G10").Formula = "=Sum(e2167:e2182, e2179:e2885)" 
       ws.Range("H10").Formula = "=Sum(e49:e54, e291:e296)" 
       ws.Range("I10").Formula = "=Sum(e125:e139)" 
       ws.Range("J10").Formula = "=Sum(e213:e286, e299:e302)" 
       ws.Range("K10").Formula = "=Sum(e168:e208)" 
       ws.Range("L10").Formula = "=Sum(e156:e162)" 
       ws.Range("O10").Formula = "=Sum(e142:e148)" 
       ws.Range("Q10").Formula = "=Sum(e14:e48, e56:e78)" 

       Case "Standard Bathroom Template" 
       ws.Range("G10").Formula = "=Sum(e334:e339, e347:e1050)" 
       ws.Range("H10").Formula = "=Sum(e185:e317)" 
       ws.Range("I10").Formula = "=Sum(e79:e97)" 
       ws.Range("J10").Formula = "=Sum(e68:e70, e323:e326)" 
       ws.Range("K10").Formula = "=Sum(e134:e178)" 
       ws.Range("L10").Formula = "=Sum(e115:e132)" 
       ws.Range("O10").Formula = "=Sum(e99:e107)" 
       ws.Range("Q10").Formula = "=Sum(e29:e33, e41:e50)" 

End Select 
Next cell '<------The code below this line is the one not working properly 

For Each Sht In ThisWorkbook.Sheets 
With Sht 
     Range("G10").Select 
     With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 12611584 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("H10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 255 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("I10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 49407 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("J10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 65535 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("K10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 5296274 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("L10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 10498160 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("O10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorAccent3 
     .TintAndShade = -0.249977111117893 
     .PatternTintAndShade = 0 
    End With 
    Range("Q10").Select 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = -0.149998474074526 
     .PatternTintAndShade = 0 
    End With 
    End With 

    Next 

    End Sub 

ответ

1

В вашем For Each Sht In ThisWorkbook.Sheets цикле вы не используете Sht объект. Вы имеете в виду диапазоны в пределах вашего ActiveSheet, потому что ваши методы .Select не имеют префикса ., который соединяет диапазоны с вашим объектом Sht.

Например после вашего With Sht вам нужна ваша следующая строка будет .Range("G10").Select не Range("G10").Select - обратите внимание на . в самом начале.

Вы уже использовали переменную Sht ранее в своем коде для определения wb1.Worksheets("Summary"), поэтому было бы лучше использовать другую переменную в вашем цикле, чтобы избежать путаницы.

Тем не менее, это не рекомендуется использовать Select, так как это замедляет код. Попробуйте это вместо:

For Each Sht In ThisWorkbook.Sheets 
    With Sht 
     With .Range("G10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 12611584 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("H10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 255 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("I10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 49407 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("J10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 65535 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("K10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 5296274 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("L10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 10498160 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With .Range("O10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .ThemeColor = xlThemeColorAccent3 
      .TintAndShade = -0.249977111117893 
      .PatternTintAndShade = 0 
     End With 
     With .Range("Q10").Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .ThemeColor = xlThemeColorDark1 
      .TintAndShade = -0.149998474074526 
      .PatternTintAndShade = 0 
     End With 
    End With 

Next Sht 
+0

Спасибо, что он отлично работает сейчас. когда я добавил. перед диапазоном, это давало мне ошибку «Выбирать метод класса Range failed», но когда я копирую вставку кода, он отлично работает. было ли что-то еще, что было неправильным в моем исходном коде? – kira123

+0

Я изменил 'Next' на' Next Sht' и подобрал некоторые углубления, чтобы помочь с видимостью, но синтаксис остался прежним, за исключением того, что я объяснил в ответе. Всегда лучше избегать «Выбрать»! Просто обратитесь к ассортименту напрямую! – Jordan

+0

Хорошо, спасибо, спасибо – kira123