2017-02-06 1 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 객체를 사용하고 있지 않습니다. .Select 메서드 앞에 Sht 개체를 연결하는 . 접두사가 없기 때문에 ActiveSheet 범위를 참조하고 있습니다. 후 예를 들어

당신의 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 앞에 "Range 클래스의 Select 메서드가 실패했습니다"라는 오류가 발생했지만 코드를 붙여 넣으면 코드가 완벽하게 작동합니다. 원래 코드에서 잘못된 부분이 있었습니까? – kira123

+0

'Next '를'Next Sht'로 바꾸고 가시성을 돕기 위해 들여 쓰기를 정돈했으나 그 답안에서 설명했던 것을 제외하고는 구문이 동일하게 유지되었습니다. 그래도 '선택'을 피하는 것이 가장 좋습니다! 직접 범위를 참조하십시오! – Jordan

+0

멋지다. 고마워. – kira123