使用VBA编程实现法律文书批量生成

律师工作中,经常遇到使用相同模板制作大量同类型文件的场景,例如群体性诉讼案件的法律文书,或某些非诉讼业务中合同、通知、回执之类文件。

在文件结构完全一致,仅有特定位置的信息、数据不同的情况下,利用Office组件的邮件合并功能,可以实现文件的快速批量生成。就此,已经有一些高手的教程流传,比如下面两篇:

手动填写out!法律文书批量自动生成 

如何批量生成法律文书 

邮件合并功能其实是Office中宏的一种具体应用,直接被作为预置功能固化在软件中。而宏是基于VBA(Visual Basic for Applications)实现的。对于略有基础的应用者,直接采用编程方式实现与预置组件类同的功能目标,有时会更加简单直接、灵活高效。

下面就介绍利用简单编程,实现与邮件合并相似的文本置换效果,从而批量生成法律文书的方法。


任务设定

某国企改制程序中,需根据职工安置方案设定的条件,生成全部职工的安置补偿合同,合同格式均相同,仅个人信息、数据不同。

软件环境

Windows 10, Office2016(Excel+Word)

操作步骤

1. 新建一个文件夹,随便命名,比如“VBA”。 打开文件夹,在根目录下新建一个docx文档,命名为“模板”;新建一个xlsx文档,随便命名,比如“批量生成”。

2.  编辑docx文档,起草模板的文本内容。这里的关键在于,每份文件之间的差异化信息,要用特定的字符标记出来,便于后面执行自动查找和替换。

这个文档中选择采用英文标记,因为这是一份纯中文的文件,英文单词在其中具有特异性,不会与文档中其他部分文字混淆,从而避免“误伤”的可能。举个例子:假定某份模板文档中用“工资”两个汉字作为待替换标记,由于它本身是一个常用词,如果在文档内其他(不需要替换的)文字内容中出现了这两个字,在自动生成的文件中也会被一并替换,造成错误。

完成后关闭文档。后面的自动生成步骤中,如果文档处于打开状态,可能无法被调用。

提示:示例文件内容乱写的,不要借鉴,否则造成执业事故后果自负……

3. 打开xlsx文档,在第一张表(sheet1)中编辑数据。数据列的内容与文档中需要替换的内容分别对应。

注意:第一行不要填有效数据,可以写标题,空着也行。因为后面的代码设定从第二行开始提取数据。

提示:这个示例表中D、E列的数值相同,是前面B、C两列的数据乘积,直接用公式生成;大小写的标准写法可以通过单元格格式设置实现。都是Excel的常规应用。

4. 切到“视图”菜单,点击“宏”标签。

5. 在弹出的对话框中给项目命名,随便填。然后点击“创建”。

6. 编程界面,右边红框内就是代码编辑区域。接下来,让我们一行一行写代码……

7. ——怎么可能。厚道如笔者,当然已经把代码准备好了。如下(重点部分加了详细注释,不再另外说明):

Sub production()

Dim mypath, docname, i, wApp                                        '定义变量

MkDir ThisWorkbook.Path & "\批量生成"                              '在当前路径下创建名为“批量生成”的文件夹,用于存放生成的文件

mypath = ThisWorkbook.Path & "\批量生成\"                        '指定“mypath”(本例定义的工作路径)为“批量生成”文件夹

For i = 2 To [a1048576].End(xlUp).Row                          '指定后面执行的循环范围,从第2行开始,到最后一个非空单元格为止

docname = "补偿协议-" & Range("A" & i) & ".docx"                '定义自动生成的文件名为“补偿协议-”+“A列i行的值(相应的姓名)”+“.docx”

FileCopy ThisWorkbook.Path & "\" & "模板.docx", mypath & docname  '复制当前路径下的“模板.docx”文件到指定路径(就是“批量生成”文件夹),并按上述规则重命名

Set wApp = CreateObject("word.application")                        '调用word程序打开文件,执行后面操作

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                                                          '循环

'(直到找不到“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. 点击“保存”按钮,对当前工作存档。结果弹出一个对话框。

这是创建文件时的一个疏忽:默认的xlsx格式不支持在文件中保存宏。这毕竟是可执行的代码,有安全风险。早些年大名鼎鼎的“宏病毒”很多人应该还有印象,虽然如今已经不多见了。

也没关系,保存为支持宏的格式就行了。点击上面对话框中的“否”,在“保存类型”下拉选单中选择“Excel 启用宏的工作簿”,保存即可。

文件已经另存为支持宏的格式(扩展名为xlsm)。

9. 打开新保存的“批量生成.xlsm”文件。同样,点开“宏”标签,选定刚才创建的项目,点击“执行”按钮,代码开始运行。等上一会儿。

10. 运行完毕。当前路径下出现了“批量生成”文件夹。

打开新的文件夹,表格里共有10个人的数据,生成10份文档,都在这里。

随便打开一份,核对信息,无误。

扩展提示

实现特定字符串查找和替换功能的模块如图所示。

每个红框内是一个字符串的替换模块,蓝色下划线标出的是需改动的值。如果需要增加、减少、调整替换目标和内容,对代码做相应修改即可。

总结

重复一遍,这种方法的优点是:在文档和数据处理的直观性、便捷性方面表现更好(比如,像本例中这样自定义规则给批量生成的文件命名,用邮件合并似乎就实现不了),特别是需要替换的内容较多时,优势可能更为明显。

另外,如有能力增加或修订代码,还可以实现更多、更精确、更灵活的定制功能。


最后附上涉及的两个文件模板(无毒)。如果打开Excel表时,程序提示宏已被禁用,点击启用即可。

文件模板  


谢谢观赏(业界良心,此处可以有掌声)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容