Visio中如何用CALLTHIS调用带调用者名称参数的子程序?
Visio中使用CALLTHIS调用带参数子程序的可行示例
步骤1:编写正确的VBA代码
打开Visio后按Alt+F11进入VBA编辑器,双击项目窗口中的ThisDocument模块,粘贴以下代码:
Public Sub Shape_DoubleClick(ByVal shapeName As String) Debug.Print "Shape_DoubleClick called for: " & shapeName MsgBox "触发双击事件的形状:" & shapeName ' 弹窗直观反馈,可按需保留或删除 End Sub
若将代码放在新建的标准模块(如Module1)中,后续CALLTHIS调用时需指定对应模块名。
步骤2:配置ShapeSheet事件单元格
- 回到Visio界面,选中目标形状,右键选择显示ShapeSheet
- 在ShapeSheet中找到EventDblClick单元格,输入以下公式:
CALLTHIS("ThisDocument.Shape_DoubleClick", Shape.Name)
若代码在标准模块Module1中,公式改为
CALLTHIS("Module1.Shape_DoubleClick", Shape.Name)
步骤3:关键设置与验证
- 将文档保存为启用宏的Visio格式(.vsdm或.vssm)
- 关闭并重新打开文档,打开时选择启用宏
- 双击目标形状,此时会弹出提示弹窗,同时在VBA编辑器的立即窗口(按
Ctrl+G打开)可看到Debug.Print的输出内容
常见问题排查
- 宏安全级别:若宏被阻止,需在Visio选项中调整宏安全设置,信任当前文档或降低安全级别
- 语法错误:确保CALLTHIS的子程序路径(模块名.子程序名)拼写正确,参数类型与子程序定义匹配
- 未重新加载文档:Visio有时需要重新打开文档才能识别新添加的宏
内容的提问来源于stack exchange,提问作者Norsak
相关产品推荐
相关产品推荐

