여러 사람의 손을 거친 MS Excel 파일에선 온갖 예측할 수 없는 일들이 벌어지곤 한다.

그 중 특이한 경우 중 하나가 스타일이 깨지는 것.


보통의 Excel 파일에서 스타일 탭을 클릭하면 아래와 비슷한 모습을 볼 수 있다.



하지만, (특히 회사에서) 여러 사람의 손을 거친 파일을 보면 저렇지 않다.



종종 이와 같이 전혀 정체를 알 수 없는 스타일들이 잔뜩 들어있는 걸 볼 수 있다.

심지어 일부는 글자가 깨져 적용할 수도, 삭제할 수도 없는 경우를 만날 수 있기도 하다.

셀을 합치려고 해도 스타일이 너무 많다는 이유로 셀도 합칠 수 없는 사태가 벌어지기도 한다.


이런 경우에 기본 스타일만을 남기고 몽땅 삭제하려면 간단하게 아래와 같은 매크로를 실행하면 된다.


Sub StyleKill()
    Dim styT As Style
    Dim intRet As Integer
    For Each styT In ActiveWorkbook.Styles
        If Not styT.BuiltIn Then styT.Delete
    Next styT
End Sub


그런데, 회사에서 스타일이 몇 천 개나 되는 경우를 만나니 너무 느리게 동작한다.

이런 경우에 최대한 빠르게 동작시키기 위해서는 화면 갱신을 잠시 멈추고, 재계산을 중단하는 등의 처리를 하면 된다.


이러한 기능을 모두 적용한 코드는 아래와 같다.


Sub StyleKill()
    Dim styT As Style
    Dim intRet As Integer
    On Error Resume Next
 
    back1 = Application.ScreenUpdating
    back2 = Application.Calculation
    back3 = Application.EnableEvents
    Count = 0
  
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
 
    For Each styT In ActiveWorkbook.Styles
        If Not styT.BuiltIn Then
            styT.Delete
            Count = Count + 1
        End If
    Next styT
 
    Application.ScreenUpdating = back1
    Application.Calculation = back2
    Application.EnableEvents = back3
 
    MsgBox (Count & " style(s) removed")
End Sub



신고

+ Recent posts