반응형

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

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


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



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



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

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

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


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


1
2
3
4
5
6
7
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


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

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


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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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



반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band