我正在excel 2016中编写VBA宏。我编写的宏有参数没有出现在宏表中,只有那些没有参数的宏。救命。
答案 0 :(得分:13)
带参数的宏在宏框中不可见,因为没有必要将它们放在那里。如果他们需要运行参数,则无法从宏框中运行它们,因为无法为相关宏提供参数。
通常,当您显示宏时,宏会显示在宏列表中 宏对话框(按Alt + F8),除非三个条件之一 见过:
宏是一个功能。函数通常返回信息, 他们需要将信息传递给他们。自从跑了 宏列表中的宏不允许这些内容中的任何一个 发生了,Excel表示没有必要列出它。用户自定义 在Excel中非常有用的函数不会显示在 宏对话框因为它们毕竟是函数。
宏是 带参数的子程序。 Excel假定参数为 必要的,你不能通过选择提供参数 从宏列表中的子程序,没有必要列出它。
子例程已声明为Private。这意味着子程序 仅对声明它的模块中的代码有用。
根据您的需要,可能的解决方法是使用如下的helper-sub:
Sub InvisibleMacro(strArg As String)
MsgBox("The passed argument was " & strArg)
' This macro won't be visible in the macro dialog because it can only be called with an argument
End Sub
Sub VisibleMacro()
Call InvisibleMacro("Abc")
' This macro will be visible in the macro dialog because it requires no arguments and is not private.
' It will call the "invisible" macro with a preset argument.
End Sub
如果您需要传递的参数是非静态的,可以使用InputBox
或类似的。当然,根据您需要传递的数据类型作为参数,这种方法可能会受到限制和/或需要一些额外的箍。
答案 1 :(得分:2)
显然,如果宏 需要 参数,则无法通过点击图标传递它们。
但我有一个只有一个可选参数的Sub,并且在尝试将其附加到自定义功能区中的图标时,它不会显示在列表中。
注释掉完整的Sub声明并替换不带参数的行,将宏附加到图标,然后放回实线。图标仍然有效。
' Temporarily use the parameterless line to set things up, then put
' back the real line. I assume this would crash if the Sub has required
' parameters.
Sub MySub()
' Sub MySub(Optional ByVal MyParm As String)
If MyParm = "" Then MyParm = "No parameter"
MsgBox (MyParm)
End Sub
答案 2 :(得分:0)
我知道这是一篇较旧的文章,但我遇到了同样的问题。我的解决方法是必须在VB编辑器中打开宏,然后将它们显示在宏列表中。从那里我可以将它们添加到功能区并更改图标。希望这会有所帮助。
答案 3 :(得分:0)
该宏具有参数时未列出,但是知道名称后,当Excel在“分配宏”窗口中提示时,使用单引号和双引号,您应该可以简单地编写名称及其参数。
以下示例将指导您如何进行操作:
'mymacro "param1"'
'mymacro TRUE, FALSE'
'mymacro "param1","param2"'
答案 4 :(得分:-2)
您可能已将宏设为“Function()”。要使它在宏列表中可见,您必须将其声明为“Sub()”。