电竞比分网-中国电竞赛事及体育赛事平台

分享

如何使用VBA編程實現(xiàn)法律文書批量生成

 L羅樂 2016-08-07



律師工作中,經(jīng)常遇到使用相同模板制作大量同類型文件的場景,例如群體性訴訟案件的法律文書,或某些非訴訟業(yè)務中合同、通知、回執(zhí)之類文件。

在文件結構完全一致,僅有特定位置的信息、數(shù)據(jù)不同的情況下,利用Office組件的郵件合并功能,可以實現(xiàn)文件的快速批量生成。就此,已經(jīng)有一些高手的教程流傳,比如下面兩篇(在此不附文章鏈接,可以用標題自行搜索查看):

手動填寫out!法律文書批量自動生成(來源于公眾號“法秀”)

如何批量生成法律文書(來源于公眾號“智善”)


郵件合并功能其實是Office中宏的一種具體應用,直接被作為預置功能固化在軟件中。而宏是基于VBA(Visual Basic for Applications)實現(xiàn)的。對于略有基礎的應用者,直接采用編程方式實現(xiàn)與預置組件類同的功能目標,有時會更加簡單直接、靈活高效。

下面就介紹利用簡單編程,實現(xiàn)與郵件合并相似的文本置換效果,從而批量生成法律文書的方法。

任務設定

某國企改制程序中,需根據(jù)職工安置方案設定的條件,生成全部職工的安置補償合同,合同格式均相同,僅個人信息、數(shù)據(jù)不同。


軟件環(huán)境

Windows 10, Office2016(Excel Word)


操作步驟

1. 新建一個文件夾,隨便命名,比如“VBA”。 打開文件夾,在根目錄下新建一個docx文檔,命名為“模板”;新建一個xlsx文檔,隨便命名,比如“批量生成”。


2.  編輯docx文檔,起草模板的文本內容。這里的關鍵在于,每份文件之間的差異化信息,要用特定的字符標記出來,便于后面執(zhí)行自動查找和替換。

這個文檔中選擇采用英文標記,因為這是一份純中文的文件,英文單詞在其中具有特異性,不會與文檔中其他部分文字混淆,從而避免“誤傷”的可能。舉個例子:假定某份模板文檔中用“工資”兩個漢字作為待替換標記,由于它本身是一個常用詞,如果在文檔內其他(不需要替換的)文字內容中出現(xiàn)了這兩個字,在自動生成的文件中也會被一并替換,造成錯誤。


完成后關閉文檔。后面的自動生成步驟中,如果文檔處于打開狀態(tài),可能無法被調用。


提示:示例文件內容亂寫的,不要借鑒,否則造成執(zhí)業(yè)事故后果自負……


3. 打開xlsx文檔,在第一張表(sheet1)中編輯數(shù)據(jù)。數(shù)據(jù)列的內容與文檔中需要替換的內容分別對應。


注意:第一行不要填有效數(shù)據(jù),可以寫標題,空著也行。因為后面的代碼設定從第二行開始提取數(shù)據(jù)。


提示:這個示例表中D、E列的數(shù)值相同,是前面B、C兩列的數(shù)據(jù)乘積,直接用公式生成;大小寫的標準寫法可以通過單元格格式設置實現(xiàn)。都是Excel的常規(guī)應用。


4. 切到“視圖”菜單,點擊“宏”標簽。


5. 在彈出的對話框中給項目命名,隨便填。然后點擊“創(chuàng)建”。

6. 編程界面,右邊紅框內就是代碼編輯區(qū)域。接下來,讓我們一行一行寫代碼……

7. ——怎么可能。厚道如筆者,當然已經(jīng)把代碼準備好了。如下(重點部分加了詳細注釋,不再另外說明):

Sub production()
Dim mypath, docname, i, wApp                                         '定義變量
MkDir ThisWorkbook.Path & '\批量生成'                              '在當前路徑下創(chuàng)建名為“批量生成”的文件夾,用于存放生成的文件
mypath = ThisWorkbook.Path & '\批量生成\'                        '指定“mypath”(本例定義的工作路徑)為“批量生成”文件夾
For i = 2 To [a1048576].End(xlUp).Row                          '指定后面執(zhí)行的循環(huán)范圍,從第2行開始,到最后一個非空單元格為止
docname = '補償協(xié)議-' & Range('A' & i) & '.docx'                 '定義自動生成的文件名為“補償協(xié)議-” “A列i行的值(相應的姓名)” “.docx”
FileCopy ThisWorkbook.Path & '\' & '模板.docx', mypath & docname   '復制當前路徑下的“模板.docx”文件到指定路徑(就是“批量生成”文件夾),并按上述規(guī)則重命名
Set wApp = CreateObject('word.application')                        '調用word程序打開文件,執(zhí)行后面操作
With wApp
.Visible = False
.Documents.Open mypath & docname                               '打開上面復制并重命名的文件
Do While .Selection.Find.Execute('name')                       '在文件中檢索“name”字符串
.Selection.Text = Range('A' & i).Text                       '使用表格A列i行的值(即相應的姓名)替換找到的“name”字符串
.Selection.HomeKey Unit:=6                                  '光標置于文件開頭
Loop                                                           '循環(huán)
'(直到找不到“name”為止,當前文檔中所有“name”字符串都已被替換)
Do While .Selection.Find.Execute('seniority')                  '(下面都是一樣的結構,就是分別用相應列中提取出來i行的值,替換各個預設的字符串,不重復)
.Selection.Text = Range('B' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('unit')
.Selection.Text = Range('C' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('compensation')
.Selection.Text = Range('D' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('inwords')
.Selection.Text = Range('E' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('status')
.Selection.Text = Range('F' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('id')
.Selection.Text = Range('G' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('phone')
.Selection.Text = Range('H' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('address')
.Selection.Text = Range('I' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('bank')
.Selection.Text = Range('J' & i).Text
.Selection.HomeKey Unit:=6
Loop
Do While .Selection.Find.Execute('account')
.Selection.Text = Range('K' & i).Text
.Selection.HomeKey Unit:=6
Loop
.Documents.Save
.Quit
End With
Next
Set wApp = Nothing
End Sub

復制以上代碼,粘貼到代碼編輯器內,替換原有全部內容。

8. 點擊“保存”按鈕,對當前工作存檔。結果彈出一個對話框。

這是創(chuàng)建文件時的一個疏忽:默認的xlsx格式不支持在文件中保存宏。這畢竟是可執(zhí)行的代碼,有安全風險。早些年大名鼎鼎的“宏病毒”很多人應該還有印象,雖然如今已經(jīng)不多見了。


也沒關系,保存為支持宏的格式就行了。點擊上面對話框中的“否”,在“保存類型”下拉選單中選擇“Excel 啟用宏的工作簿”,保存即可。


文件已經(jīng)另存為支持宏的格式(擴展名為xlsm)。

9. 打開新保存的“批量生成.xlsm”文件。同樣,點開“宏”標簽,選定剛才創(chuàng)建的項目,點擊“執(zhí)行”按鈕,代碼開始運行。等上一會兒。

10. 運行完畢。當前路徑下出現(xiàn)了“批量生成”文件夾。

打開新的文件夾,表格里共有10個人的數(shù)據(jù),生成10份文檔,都在這里。

隨便打開一份,核對信息,無誤。
擴展提示

實現(xiàn)特定字符串查找和替換功能的模塊如圖所示。


每個紅框內是一個字符串的替換模塊,藍色下劃線標出的是需改動的值。如果需要增加、減少、調整替換目標和內容,對代碼做相應修改即可。

總結

重復一遍,這種方法的優(yōu)點是:在文檔和數(shù)據(jù)處理的直觀性、便捷性方面表現(xiàn)更好(比如,像本例中這樣自定義規(guī)則給批量生成的文件命名,用郵件合并似乎就實現(xiàn)不了),特別是需要替換的內容較多時,優(yōu)勢可能更為明顯。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多