【问题标题】:Passing arguments from Visio ShapeSheet to procedure in VBA将参数从 Visio ShapeSheet 传递到 VBA 中的过程
【发布时间】:2021-06-16 00:22:16
【问题描述】:

我已经使用 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参数不是可选的,因此会触发编译错误留言

“参数不是可选的”

【问题讨论】:

  • 在帖子中包含您的代码将帮助读者消除许多可能性。请edit您的帖子向我们展示您的代码是如何传递这些参数的。
  • 感谢提示,已添加示例代码。

标签: vba parameter-passing procedure shapes visio


【解决方案1】:

我的程序最近也受到此更新的影响。以前,我能够在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2013-08-24
    • 1970-01-01
    • 2013-12-07
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多