你能用一个按钮调用一个带有参数的Sub吗?

时间:2016-03-10 12:31:57

标签: excel vba excel-vba

我想使用Excel工具栏中的按钮调用以下子工具,但是当您尝试分配宏时,它不会出现在列表中。我也从一个更大的宏调用它,在这种情况下我不想显示“完成”消息框。因此我有DontShowMsgBox布尔参数。

Sub InteriorDumbCopyExport(DontShowMsgBox as Boolean)

'do stuff...

If DontShowMsgBox Then
    MsgBox "Finished."
End If

End Sub

当我添加参数时,我无法再在列表中看到它。有一个简单的方法吗?

我想直接调用sub,因为我必须从形状中调用它,所以不能使用ActiveX按钮。到目前为止,我还没有找到任何搜索内容,但觉得必须有一个解决方案,否则带参数的函数和带参数的子有什么区别?

4 个答案:

答案 0 :(得分:4)

只需使用其他sub

按钮sub
Sub test() 'call with your button
Call InteriorDumbCopyExport(DontShowMsgBox as Boolean)
End Sub

答案 1 :(得分:4)

你确实可以这样做。在“指定宏”对话框中,只需键入宏的名称和参数,所有这些都用单引号括起来。例如:

'InteriorDumbCopyExport True'

但请注意,如果您的工作簿保存为xlsb文件(我不知道原因),这可能会导致问题。

在这种特殊情况下,我只是将参数设置为可选,并默认为您希望形状使用的值。然后,您只需在“指定宏”对话框中使用宏名称,而无需添加参数。

答案 2 :(得分:0)

另一种方法是了解DontShowMsgBox的来源。作为一个公共变量,你可以在执行宏之前设置它,然后在没有调用本身参数的情况下直接使用它。
在任何模块中:

Dim DontShowMsgBox As Boolean

如果您只需要它进行调试,那么请将其设为Const,只有在您需要时才会为真。

答案 3 :(得分:-1)

对于正常行为的F​​ORM控件,因为您无法根据参数分配Sub,因为按钮不知道要移交哪个参数(出于类似的原因,您无法将功能链接到按钮),而ActiveX按钮会在它出现的工作表的代码空间中创建自己的Sub(例如Private Sub CommandButton1_Click())。

因此,使用不带参数的Sub来调用按钮,在sub中确定DontShowMsgBox的实际条件,并调用另一个Sub来完成您为此参数提供的作业。