워드 문서가 페이지 수가 너무 많아서 로딩이나 스크롤이 오래걸리고 지연될 때
긴 문서를 일정 단위로 분할하여 저장하는 워드 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
너무 많은 페이지가 많은 문서를 로딩하느라 스크롤 작동이 느려질 때
일정 페이지마다 분할해서 저장할 용도입니다.
참고: 지식인
첨부파일 :
'DOC+VBA' 카테고리의 다른 글
워드문서 열 때 자동으로 마지막 편집 페이지로 이동하기 (0) | 2025.01.09 |
---|---|
워드 문서 1페이지당 그림 한 장 씩 일괄 삽입 (1) | 2024.10.11 |
폴더내 모든 워드문서의 읽기전용 속성 해제 (0) | 2024.02.01 |
워드 XML Mapping을 이용한 일괄 텍스트 수정, 관리 (0) | 2024.01.31 |
슬라이드의 특정 이름의 개체 속의 텍스트를 워드 문서로 출력 (1) | 2023.12.06 |
엑셀연동 워드문서 일괄생성 (메일머지 기능) (0) | 2021.06.03 |
워드(Doc)문서를 PPT 슬라이드로 변환하기 (7) | 2020.02.08 |
최근댓글