????很多時候,您是否有過在WORD里面重復(fù)制作某種資料的工作蓬豁。比如給定了合同模板菇肃,需要根據(jù)不同合同內(nèi)容制作出不同的合同巷送,但模板是一樣的。一般情況下就是老老實實的一份一份的去填寫(還不保證不會有錯誤)付魔。那么有沒有可以自動生完成的辦法呢?答案是肯定有翻屈,不然我在這嗶嗶啥呢妻坝!接下來言歸正傳。在此上個大招厘贼,接下來就以合同為例:
1圣拄、制作合同模板文件,把合同變量部分用特殊變量替換岳掐。圖示如下:
2串述、在EXCEL里面添加合同主要內(nèi)容數(shù)據(jù)寞肖,圖示如下:
3逝淹、在EXCEL里面添加一個Active X按鈕控件,根據(jù)自身需要修改其屬性茉兰。
4规脸、.在按鈕控件下寫如下代碼熊咽,并將該EXCEL文件另存為XLSM:
? Private Sub cmd_makedoc_Click()
On Error GoTo Err_cmdExportToWord_Click
? ? Dim objApp As Object 'Word.Application
? ? Dim objDoc As Object 'Word.Document
? ? Dim strTemplates As String '模板文件路徑名
? ? Dim strFileName As String '將數(shù)據(jù)導(dǎo)出到此文件
? ? Dim i As Integer
? ? Dim contact_NO As String
? ? Dim side_A As String
? ? Dim side_B As String
? ? i = ActiveCell.Row
? ? contact_NO = Cells(i, 1)
? ? side_A = Cells(i, 2)
? ? side_B = Cells(i, 3)
? ? With Application.FileDialog(msoFileDialogFilePicker)
? ? ? ? .Filters.Add "word文件", "*.doc*", 1
? ? ? ? .AllowMultiSelect = False
? ? ? ? If .Show Then strTemplates = .SelectedItems(1) Else Exit Sub
? ? End With
? '通過文件對話框生成另存為文件名
? ? With Application.FileDialog(msoFileDialogSaveAs)
? ? ? ? '.InitialFileName = CurrentProject.Path & "\" & contact_NO & ".doc"
? ? ? ? .InitialFileName = contact_NO & ".doc"
? ? ? ? If .Show Then strFileName = .SelectedItems(1) Else Exit Sub
? ? End With
? ? '文件名必須包括“.doc”的文件擴展名横殴,如沒有則自動加上
? ? If Not strFileName Like "*.doc" Then strFileName = strFileName & ".doc"
? ? '如果文件已存在卿拴,則刪除已有文件
? ? If Dir(strFileName) <> "" Then Kill strFileName
? ? '打開模板文件
? ? Set objApp = CreateObject("Word.Application")
? ? objApp.Visible = True
? ? Set objDoc = objApp.Documents.Open(strTemplates, , False)
? '開始替換模板預(yù)置變量文本
? With objApp.Application.Selection
? ? ? ? .Find.ClearFormatting
? ? ? ? .Find.Replacement.ClearFormatting
? ? ? ? With .Find
? ? ? ? ? ? .Text = "{$合同編號}"
? ? ? ? ? ? .Replacement.Text = contact_NO
? ? ? ? End With
? ? ? ? .Find.Execute Replace:=wdReplaceAll
? ? ? ? With .Find
? ? ? ? ? ? .Text = "{$甲方}"
? ? ? ? ? ? .Replacement.Text = side_A
? ? ? ? End With
? ? ? ? .Find.Execute Replace:=wdReplaceAll
? ? ? With .Find
? ? ? ? ? ? .Text = "{$乙方}"
? ? ? ? ? ? .Replacement.Text = side_B
? ? ? End With
? ? ? .Find.Execute Replace:=wdReplaceAll
? ? End With
? ? '將寫入數(shù)據(jù)的模板另存為文檔文件
? ? objDoc.SaveAs strFileName
? ? objDoc.Saved = True? ? ? ? ? ?
? ? MsgBox "合同文本生成完畢堕花!", vbYes + vbExclamation
Exit_cmdExportToWord_Click:
? ? If Not objDoc Is Nothing Then objApp.Visible = True
? ? Set objApp = Nothing
? ? Set objDoc = Nothing
? ? Set objTable = Nothing
? ? Exit Sub
Err_cmdExportToWord_Click:
? ? MsgBox Err.Description, vbCritical, "出錯"
? ? Resume Exit_cmdExportToWord_Click
End Sub
核心技術(shù)部分完畢缘挽,那么如何使用呢呻粹?
1、單擊選定需要輸出數(shù)據(jù)制作合同的行的任意單元格腮郊。比如我在此選定了第一行中的B2單元格筹燕,當(dāng)然你可以選擇該行的任意一單元格庄萎。
2塘安、單擊“生成”按鈕兼犯,彈出合同模板選擇對話框。在此砸脊,選擇我們剛才制作好的合同模板纬霞。
3、打開應(yīng)用該模板瞳抓,然后隨之彈出生成后的合同另存為的對話框伏恐。這里文件名會被自動保存為合同編號翠桦。
4、生成完畢丛晌。以下是效果
? ? 以上是拋磚引玉的一個辦法茵乱,僅需對代碼中需要替換的部分進行更改,那么基本上可以做到復(fù)雜的輸出督勺。實際上技術(shù)難度沒多大斤贰,僅僅是利用了Office里面的宏替換原理而已。經(jīng)過改造瓷叫,在實際的生產(chǎn)環(huán)境中送巡,可以利用EXCEL從其它系統(tǒng)獲取數(shù)據(jù)骗爆,然后再批量制作各種WORD文檔。