我已经和Visio合作了几年。我使用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进行了修补程序更新之后,我再也无法将参数从形状的ShapeSheet传递到我的过程中。每当我使用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这个过程在形状的EventDblClick中被调用:
RUNMACRO("HelloWorld(1)","Test")当触发EventDblClick时,Number的值保持为null,忽略RUNMACRO函数中发送的参数,这是一个1。
“参数不是可选的”
发布于 2021-03-19 03:02:24
我的程序最近也受到这一更新的影响。以前,我能够在RUNMACRO (macroname,projname_opt)中构造“macroname”字符串,以包含函数和子程序的参数(如Alexis的HelloWorld示例)。然而,这似乎突然变得不可能了。似乎RUNMACRO现在正在修改“macroname”字符串,以在调用函数或子例程之前排除任何参数。
我发现的一个解决办法是使用CALLTHIS并稍微重构VBA函数或子例程,如下所示。尽管如此,使用RUNMACRO公式在每个单元格、每个形状、每个文件中执行这一更改,对我来说将是一个巨大的麻烦。我需要编写一个单独的宏来执行这个更改。
解决办法:
CALLTHIS(HelloWorld,1)注:这两个逗号是有意的。
Public Function HelloWorld(callingShape as Visio.Shape, number as Integer)
‘Insert Code Here
End Functionhttps://stackoverflow.com/questions/66693829
复制相似问题