【问题标题】:Can a procedure with optional parameters be listed in the menu to run macros?可以在菜单中列出带有可选参数的过程来运行宏吗?
【发布时间】:2016-04-19 10:16:45
【问题描述】:

当您在 VBA 中编写程序时,它会出现在宏列表中,以便用户可以运行它。如果您向所述子添加参数,它当然会从列表中消失。

但是,当我将参数设置为可选参数并使用默认值时,它仍然不会显示在那里。有可能做到吗,想想?

Sub runsomething(Optional ByVal sheetname As String = "setup")

【问题讨论】:

  • 没有。您将需要一个额外的不带参数的调用子程序来简单地调用您的主例程。 (注意:您仍然可以通过键入其名称从宏对话框中运行例程,但它不会出现在列表中。)
  • @Rory:我的答案在我的 Excel 2013 中有效
  • 显然可以!不知道! — 谢谢!
  • @user3598756 是的 - 抱歉。只要您使用 Variant 并且不提供默认值在声明中,它就可以工作。
  • @Rory:是的,这正是我提出的。作为进一步的改进,如果 OP 需要一个字符串类型的变量,那么他可以声明一些 dim sheetnameStr as string 并继续使用 If IsMissing(sheetname) Then sheetnameStr = "setup" : Else : sheetnameStr =CStr(sheetname)

标签: vba excel


【解决方案1】:
Sub runsomething(Optional ByVal sheetname As Variant)

If IsMissing(sheetname) Then sheetname = "setup"
'...
End Sub

【讨论】:

  • 在我的 Excel 2013 中它可以工作。我写了两个子:第一个是第一行Sub runsomething(Optional ByVal sheetname As String = "setup"),第二个是第一行Sub runsomething2(Optional ByVal sheetname As Variant)。按下“ALT+F8”后,宏窗口弹出,我只看到“runsomething2”。当然没有一个是Private...
  • 这很奇怪,因为它不能与字符串一起工作,而且你不能有一个默认值让它工作¯_(ツ)_/¯ +1
  • 请参阅我的最后一条评论,无论如何在您的子程序中都有一个字符串类型的变量。至于默认值,您仍然可以根据我发布的答案获得它(默认为“设置”)。如果我没有回答,请说明您的需求
猜你喜欢
  • 2011-08-16
  • 1970-01-01
  • 2018-09-02
  • 2013-08-26
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多