이 간단한 단어 매크로가 왜 그렇게 느린가요?

이 간단한 단어 매크로가 왜 그렇게 느린가요?

이 매크로는 문서의 모든 테이블에 테이블 디자인을 적용합니다. 그런 다음 테이블에 단락 형식을 적용합니다. 테이블이 몇 개(예: 20개) 있는 경우에는 매우 느리게 실행됩니다.

어떻게 최적화할 수 있나요?

Sub Apply_tabledesign_to_all_tables()
'
' Apply_tabledesign_to_all_tables Macro
' Apply EVU table to all tables in document. 
'
Application.ScreenUpdating = False
    Dim tbl As Table
    Dim ac_cell As Word.cell
        For Each tbl In ActiveDocument.Tables
            tbl.Style = "EVU"
        For Each ac_cell In tbl.Range.Cells
            ac_cell.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
        Next
        'Set the alignment for the first column
        For k = 1 To tbl.Columns(1).Cells.Count
                tbl.cell(k, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
        Next k
    Next
Application.ScreenUpdating = True
End Sub

편집: 첫 번째 열의 정렬을 포함하는 것을 잊었습니다.

답변1

테이블 전체를 반복한 다음 각 테이블의 각 셀을 반복합니다. 시간이 좀 걸릴 거예요. 셀을 반복하는 대신 범위를 단일 개체로 처리합니다.

이와 같은 것이 작동해야 합니다(개체가 정확하다고 가정).

Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
    tbl.Style = "EVU"
    tbl.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
End Sub

본질적으로 이것은 (확실히 작동합니다)

Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
    tbl.Style = "Light Shading"
    tbl.Range.ParagraphFormat.Style = "Heading 1"
Next
End Sub

답변2

제가 구현해야 했던 또 다른 비결은 페이지 다시 매김을 차단하기 위해 페이지 보기에서 연속 보기로 전환하는 것입니다. 이 경우의 요점은 화면 업데이트를 중지하더라도 탭의 모든 수정 사항에 대해 전체 문서의 페이지를 다시 매긴다는 것입니다.

페이지 다시 매김을 효과적으로 차단하는 방법은 현재 페이지 보기 모드를 var에 저장하고 화면 업데이트 차단 직후 강제 연속 보기를 수행하는 것입니다.

Dim ViewModeSave As Variant
Application.ScreenUpdating = False    
ViewModeSave = Application.ActiveWindow.View.Type
Application.ActiveWindow.View.Type = Word.wdNormalView

작업이 끝나면 원래 설정을 다시 가져와야 합니다.

Application.Options.Pagination = True
Application.ScreenUpdating = True
Application.ActiveWindow.View.Type = ViewModeSave

답변3

나는 테이블의 셀을 반복하고 각 셀의 단락 형식을 설정하는 동일한 문제를 겪었습니다. 위의 답변에 동의하지만 병목 현상이 발생하는 것은 셀을 반복하는 것이 아니라 실제로 느린 단락 서식입니다. 엄청나게 느립니다. 루프에 설정한 단락 형식 속성의 수를 변경하는 실험을 했습니다. 속성 1개를 설정하는 것은 빨랐지만 속성 수를 8로 설정하면 vba 코드가 점점 느려졌습니다. 8시에는 정말 느렸어요. 제 생각에는 2013년 문제에 불과한 것 같습니다.

관련 정보