如何解决将 Visio ShapeSheet 中的参数传递给 VBA 中的过程
我使用 Visio VBA 已经有几年了。我使用 RUNMACRO() 或 CALLTHIS() 函数将参数从形状的 ShapeSheet 传递给 VBA 中的几个过程。
我要么传递普通字符串,要么传递 ShapeSheet 中不同公式的值。我传递给程序的最常见参数是形状的 ID()。
在 Windows 的补丁更新后:https://support.microsoft.com/en-us/topic/march-15-2021-kb5001566-os-build-18363-1441-out-of-band-23c4c824-8638-43e9-a381-ff58213ae6fe,我无法再将参数从 Shape 的 ShapeSheet 传递到 VBA 中的过程。每当我使用 RUNMACRO 或 CALLTHIS 时,我传递的所有参数,即使它们是纯字符串,在我的过程中,我得到的一切都是“”,空白信息。
有没有办法知道这是一个错误还是故意的,也许是作为一种安全措施?
这是一个简单的示例程序:
Public Function HelloWorld(Number As Integer)
If Number = 1 Then
MsgBox ("Hello World 1")
End If
If Number = 2 Then
MsgBox ("Hello World 2")
End If
End Function
这个过程在一个Shape的EventDblClick中被调用:
RUNMACRO("HelloWorld(1)","Test")
当EventDblClick被触发时,Number的值保持为null,忽略RUNMACRO函数中发送的参数为1。由于HelloWorld()函数中Number的参数不是可选的,因此会触发编译错误留言
“参数不是可选的”
解决方法
我的程序最近也受到此更新的影响。以前,我能够在 RUNMACRO (macroname [,projname_opt]) 中构造“macroname”字符串以包含我的函数和子例程的参数(如 Alexis 的 HelloWorld 示例)。然而,这突然之间似乎不再可能了。几乎就像 RUNMACRO 现在正在修改“宏名称”字符串以在调用函数或子例程之前排除任何参数。
我发现的一种解决方法是使用 CALLTHIS 并稍微重构 VBA 函数或子例程,如下所示。也就是说,使用 RUNMACRO 公式在每个单元格、每个形状、每个文件中执行此更改对我来说将是一个巨大的麻烦。我将不得不编写一个单独的宏来执行此更改。
解决方法:
Callthis(HelloWorld,1) [注意:这两个逗号是故意的。]
Public Function HelloWorld(callingShape as Visio.Shape,number as Integer)
‘Insert Code Here
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。