워드 문서가 페이지 수가 너무 많아서 로딩이나 스크롤이 오래걸리고 지연될 때

긴 문서를 일정 단위로 분할하여 저장하는 워드 VBA입니다.

 

일단 아래 코드는 테스트를 위해 현재 워드 문서에 원하는 만큼의 빈 페이지를 추가하고

각 페이지 상단에 페이지 번호를 추가합니다.

Sub AddPagesAndPageNums()

  Dim i As Long
  Dim totalPages As Long
  Dim rng As Range

  ' 총 페이지 수를 100으로 설정
  totalPages = 100

  ' 문서에 페이지가 부족하면 추가
  While ActiveDocument.ComputeStatistics(wdStatisticPages) < totalPages
    ActiveDocument.Paragraphs.Last.Range.InsertBreak wdPageBreak
  Wend

  ' 각 페이지에 페이지 번호 삽입
  For i = 1 To totalPages
    ' 페이지 범위를 가져옴
    Set rng = ActiveDocument.Range.GoTo(wdGoToPage, wdGoToAbsolute, i)

      ' 범위 시작 위치에 페이지 번호 삽입
      rng.InsertBefore "페이지 " & i & " / " & totalPages & vbCrLf ' "페이지 x / y" 형식으로 삽입 후 줄 바꿈
      rng.ParagraphFormat.Alignment = wdAlignParagraphCenter ' 가운데 정렬

  Next i

End Sub

 

 

아래 코드는 현재 문서를 20페이지씩 분할하여 0001.docx, 0002.docx, 0003,docx....에 각각 저장합니다.

일정 부분의 페이지를 복사해서 새로운 문서에 붙여넣는 방식입니다.

Sub SavePagesToFiles()

    Dim aDoc As Document, nDoc As Document
    Dim rng As Range, pageRng As Range
    Dim i As Long, totalPages As Long, PageStep As Long
    Dim startPos As Long, endPos As Long

    Set aDoc = ActiveDocument
    totalPages = aDoc.ComputeStatistics(wdStatisticPages)
    PageStep = 20

    For i = 1 To totalPages Step PageStep
        Set nDoc = Documents.Add

        startPos = aDoc.GoTo(wdGoToPage, wdGoToAbsolute, i).Start

        If i + PageStep - 1 > totalPages Then
            endPos = aDoc.Content.End ' 마지막 그룹인 경우 문서 끝까지
        Else
            endPos = aDoc.GoTo(wdGoToPage, wdGoToAbsolute, i + PageStep).Start - 1 ' 다음 페이지 시작 바로 앞까지
            endPos = endPos - 1 'PageBreak 제외
        End If

        Set pageRng = aDoc.Range(startPos, endPos)
 
        'If i = 21 Then Debug.Print i, startPos, endPos, pageRng.Text
        
        pageRng.Copy: DoEvents
        nDoc.Range.Paste: DoEvents
        
        nDoc.SaveAs2 (Format(i, "0000") & ".docx")
        nDoc.Close SaveChanges:=wdDoNotSaveChanges
    Next i

    Set aDoc = Nothing
    Set nDoc = Nothing
End Sub

 

 

너무 많은 페이지가 많은 문서를 로딩하느라 스크롤 작동이 느려질 때

일정 페이지마다 분할해서 저장할 용도입니다.

 

 

 

참고: 지식인

 

첨부파일 :

Pages1.docm
0.03MB