如何重用VBA代码在Word运行时创建多个带事件的命令按钮?
批量创建Word命令按钮并绑定自定义事件的VBA方案
实现思路
把需要创建的按钮信息(显示标题、对应执行的功能过程)整理成集合,通过循环批量生成每个按钮,并自动为每个按钮添加绑定自定义功能的点击事件代码。
完整VBA代码
Sub CreatePatientRecordButtons() Dim doc As Word.Document Dim shp As Word.InlineShape Dim btnInfo As Variant Dim btnItem As Variant Dim sCode As String Dim btnName As String ' 定义按钮标题与对应执行的过程名,按顺序一一对应 btnInfo = Array( _ Array("添加患者信息", "AddPatientInfo"), _ Array("添加病史", "AddMedicalHistory"), _ Array("打印记录", "PrintPatientRecord"), _ Array("保存记录", "SavePatientRecord") _ ) Set doc = ActiveDocument ' 循环创建每个按钮并绑定事件 For Each btnItem In btnInfo ' 创建命令按钮控件 Set shp = doc.Content.InlineShapes.AddOLEControl(ClassType:="Forms.CommandButton.1") btnName = shp.OLEFormat.Object.Name ' 设置按钮显示标题 shp.OLEFormat.Object.Caption = btnItem(0) ' 生成按钮点击事件代码,绑定到自定义功能过程 sCode = "Private Sub " & btnName & "_Click()" & vbCrLf & _ " " & btnItem(1) & vbCrLf & _ "End Sub" & vbCrLf ' 将事件代码写入ThisDocument模块 doc.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString sCode Next btnItem End Sub ' ---------------------- 以下替换为你自己的功能代码 ---------------------- Sub AddPatientInfo() ' 这里编写添加患者信息的业务代码 MsgBox "执行添加患者信息操作" End Sub Sub AddMedicalHistory() ' 这里编写添加病史的业务代码 MsgBox "执行添加病史操作" End Sub Sub PrintPatientRecord() ' 这里编写打印记录的业务代码 MsgBox "执行打印记录操作" End Sub Sub SavePatientRecord() ' 这里编写保存记录的业务代码 MsgBox "执行保存记录操作" End Sub
注意事项
- 必须开启Word的宏信任权限:文件→选项→信任中心→信任中心设置→宏设置,勾选「信任对VBA项目对象模型的访问」
- 将示例中的功能过程代码替换为你自己的业务逻辑
- 执行
CreatePatientRecordButtons宏,即可在当前文档生成所有目标按钮
内容的提问来源于stack exchange,提问作者Siddharth Kharkar
相关产品推荐
相关产品推荐

