宏没有出现在宏表中

时间:2016-12-20 04:18:24

标签: excel-vba vba excel

我正在excel 2016中编写VBA宏。我编写的宏有参数没有出现在宏表中,只有那些没有参数的宏。救命。

5 个答案:

答案 0 :(得分:13)

带参数的宏在宏框中不可见,因为没有必要将它们放在那里。如果他们需要运行参数,则无法从宏框中运行它们,因为无法为相关宏提供参数。

  

通常,当您显示宏时,宏会显示在宏列表中   宏对话框(按Alt + F8),除非三个条件之一   见过:

     
      
  • 宏是一个功能。函数通常返回信息,   他们需要将信息传递给他们。自从跑了   宏列表中的宏不允许这些内容中的任何一个   发生了,Excel表示没有必要列出它。用户自定义   在Excel中非常有用的函数不会显示在   宏对话框因为它们毕竟是函数。

  •   
  • 宏是   带参数的子程序。 Excel假定参数为   必要的,你不能通过选择提供参数   从宏列表中的子程序,没有必要列出它。

  •   
  • 子例程已声明为Private。这意味着子程序   仅对声明它的模块中的代码有用。

  •   

Source

根据您的需要,可能的解决方法是使用如下的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()”。