首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数从Visio ShapeSheet传递到VBA中的过程

将参数从Visio ShapeSheet传递到VBA中的过程
EN

Stack Overflow用户
提问于 2021-03-18 15:10:22
回答 1查看 228关注 0票数 1

我已经和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时,我传递的所有参数,即使它们是普通字符串,在我的过程中得到的一切都是"",空白信息。

有没有办法知道这是一个漏洞,或者这是故意的,也许作为一种安全措施?

下面是一个简单的示例过程:

代码语言:javascript
复制
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中被调用:

代码语言:javascript
复制
RUNMACRO("HelloWorld(1)","Test")

当触发EventDblClick时,Number的值保持为null,忽略RUNMACRO函数中发送的参数,这是一个1。

“参数不是可选的”

EN

回答 1

Stack Overflow用户

发布于 2021-03-19 03:02:24

我的程序最近也受到这一更新的影响。以前,我能够在RUNMACRO (macroname,projname_opt)中构造“macroname”字符串,以包含函数和子程序的参数(如Alexis的HelloWorld示例)。然而,这似乎突然变得不可能了。似乎RUNMACRO现在正在修改“macroname”字符串,以在调用函数或子例程之前排除任何参数。

我发现的一个解决办法是使用CALLTHIS并稍微重构VBA函数或子例程,如下所示。尽管如此,使用RUNMACRO公式在每个单元格、每个形状、每个文件中执行这一更改,对我来说将是一个巨大的麻烦。我需要编写一个单独的宏来执行这个更改。

解决办法:

CALLTHIS(HelloWorld,1)注:这两个逗号是有意的。

代码语言:javascript
复制
Public Function HelloWorld(callingShape as Visio.Shape, number as Integer)
       ‘Insert Code Here
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66693829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档