관련:
아래내용은 위 링크 1번에서 질문자님의 질문에 대한 지식인 '큰형'님의 소스를 기반으로 수정한 내용입니다.
데이터는 아래와 같은 엑셀문서 양식에 들어 있습니다.
2행에 있는 여러가지 "{항목}" 문자열을 찾아서
워드문서 생성이 O 라면
각 행의 데이터로 바꿔서 아래 워드 문서를 만들어서
지정된 파일명으로 저장하는 일괄처리 작업입니다.
작업을 위해서는 기준이 될 워드문서 내에 {항목}과 같은 표시가 만들어져 있어야 합니다.
{항목}은 1개가 아니라 여러군데 있어도 됩니다.
예전 아래한글 프로그램에 있던 메일머지 기능과 유사합니다.
엑셀 데이터를 기반으로 여러장의 워드 문서를 만들 때 유용하겠습니다.
코드는 아래를 참고하세요.
더보기
Option Explicit
Sub 직사각형1_Click()
'Dim w As Word.Application, D As Word.Document
Dim w As Object, D As Object
Dim n As Integer, m As Integer
Dim T As Variant
Dim docFile As String
Dim lastRow As Long
Dim SPR As String
Dim myRange As Object 'Word.Range
SPR = Application.PathSeparator '// 윈도우의 경우 '\'문자
docFile = ThisWorkbook.Path & SPR & "표준계약서"
'Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, 3).End(xlUp).Row
If lastRow < 3 Then Exit Sub
T = Range("B2:O" & lastRow).Value '//*********** B열부터 O열까지
' 워드에서 표준계약서.docx문서 복사본 오픈
Set w = CreateObject("Word.Application")
w.Visible = True
For n = 2 To UBound(T)
If T(n, UBound(T, 2)) = "O" Then '저장여부가 "O"이면
Set D = w.Documents.Open(Filename:=docFile & ".docx", ReadOnly:=True, Visible:=True)
Set myRange = D.Content
For m = 1 To (UBound(T, 2) - 2) '// ************* B:O열까지에서 N열,O열 2개열은 제외
With myRange.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = T(1, m): .Replacement.Text = T(n, m)
.Execute Replace:=2 '// 2: wdReplaceAll
'Debug.Print T(1, m); T(n, m)
End With
Next m
'문서 저장 및 종료
'D.SaveAs2 Filename:=docFile & "_" & T(n, 2) & ".docx" ' // ***** 표준계약서_홍길동.docx
D.SaveAs2 Filename:=ThisWorkbook.Path & SPR & T(n, UBound(T, 2) - 1) & ".docx"
D.Close True '저장
End If
Next n
Set D = Nothing: w.Quit False: Set w = Nothing '초기화
End Sub
'DOC+VBA' 카테고리의 다른 글
워드 문서 1페이지당 그림 한 장 씩 일괄 삽입 (1) | 2024.10.11 |
---|---|
폴더내 모든 워드문서의 읽기전용 속성 해제 (0) | 2024.02.01 |
워드 XML Mapping을 이용한 일괄 텍스트 수정, 관리 (0) | 2024.01.31 |
슬라이드의 특정 이름의 개체 속의 텍스트를 워드 문서로 출력 (1) | 2023.12.06 |
워드(Doc)문서를 PPT 슬라이드로 변환하기 (7) | 2020.02.08 |
최근댓글