VBA / Excel 使用VBA合併套印輸出並轉成PDF

這個是在Line社團裡面的討論

有人發問想在word合併列印之後直接將檔案輸出成PDF

由於這是超過word本身的流程,因此只能透過VBA來達成

他自己曾經嘗試處理,也詢問過GPT得到VBA程式碼

但是無法輸出想要的結果

我後來測試他提供的檔案與程式碼

一開始我是測試程式碼,結果程式碼是可以運作的

所以我才進一步去看整體檔案(vba程式碼、套印資料來源excel、套印格式word檔)

發現程式尋找的字串跟word內的字串不一致

修改之後,程式碼便能順利運作,套印輸出相對應的內容

回過頭來說程式碼的執行邏輯

這個VBA程式是透過在套印格式word檔中尋找特定字串、用資料表的資料取代特定字串以及搭配迴圈來產生套印的效果

跟在google apps script套印文件的邏輯是一樣的

我之前也曾經測試過「Gg / 使用google documen製作模板套印google spreadsheets資料並轉成PDF

以下提供本次的測試碼

Excel VBA的程式碼

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Sub ExportToWordAndPDF()
    Dim ws As Worksheet
    '早期繫結 需要引用 Microsoft Word Object Library
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim wordTemplatePath As String
    Dim lastRow As Long
    Dim i As Long
    Dim rngA As Range, rngB As Range, rngC As Range
    Dim fileName As String
    Dim savePath As String

    ' 設定工作表
    Set ws = ThisWorkbook.Sheets("工作表1") ' 替換為你的工作表名稱

    ' 獲取資料的最後一行
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' 設定Word範本路徑
    wordTemplatePath = ThisWorkbook.Path & Application.PathSeparator & "temp.docx" ' 替換為你的Word範本路徑

    ' 創建Word應用程式對象
    On Error Resume Next
    Set wordApp = New Word.Application
    On Error GoTo 0

    ' 顯示Word應用程式(可選)
    wordApp.Visible = True

    ' 循環遍歷Excel中的每一行資料
    For i = 2 To lastRow ' 假設從第2行開始有資料,跳過標題行
        ' 選擇要插入的列
        Set rngA = ws.Cells(i, 1)
        Set rngB = ws.Cells(i, 2)
        Set rngC = ws.Cells(i, 3)

        ' 打開Word範本
        Set wordDoc = wordApp.Documents.Add(wordTemplatePath)

        ' 插入Excel資料到Word文件的指定位置
        With wordDoc
            .Content.Find.Execute FindText:="<<姓名>>", ReplaceWith:=rngA.Value, Replace:=wdReplaceAll
            .Content.Find.Execute FindText:="<<名次>>", ReplaceWith:=rngB.Value, Replace:=wdReplaceAll
            .Content.Find.Execute FindText:="<<獎金>>", ReplaceWith:=rngC.Value, Replace:=wdReplaceAll
        End With

        ' 設定保存路徑和文件名
        savePath = ThisWorkbook.Path & Application.PathSeparator
        fileName = rngA.Value ' 使用A列資料作為文件名

        ' 保存Word文件 PDF格式
        wordDoc.SaveAs2 fileName:=savePath & fileName & ".pdf", FileFormat:=wdFormatPDF

        ' 關閉文件
        wordDoc.Close False
    Next i

    ' 關閉Word應用程式
    wordApp.Quit

    ' 清理對象
    Set wordDoc = Nothing
    Set wordApp = Nothing
    Set rngA = Nothing
    Set rngB = Nothing
    Set rngC = Nothing
    
End Sub

 

Excel 套印資料來源

Word套印格式範本

關隘所在

提問者的問題就是出在word套印格式的字串 與 程式碼的 FindText 沒有對應一致

所以在word會找不到相符的字串,自然也就無法取代

套印輸出成PDF

輸出的檔案內容