你可以用一个button调用一个有参数的Sub吗?

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

Sub InteriorDumbCopyExport(DontShowMsgBox as Boolean) 'do stuff... If DontShowMsgBox Then MsgBox "Finished." End If End Sub 

这是当我添加的论点,我不能再在列表中看到它。 有没有简单的方法呢?

我想直接调用sub,因为我必须从形状调用它,所以不能使用ActiveXbutton。 我到目前为止还没有发现任何东西,但是觉得必须有一个解决scheme,否则函数与参数和带有参数的子函数有什么区别?

你确实可以做到这一点。 在“分配macros”对话框中,只需键入macros的名称和参数,全部用单引号引起来。 例如:

'InteriorDumbCopyExport True'

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

在这个特殊的情况下,我只是使参数可选,默认为你想要的形状使用的值。 然后,只需在“分配macros”对话框中使用macros名称,而无需添加参数。

只需调用你的button sub与另一个sub

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

另一种方法是知道你的DontShowMsgBox的来源。 作为一个公共variables,你可以在执行macros前设置它,然后直接在没有参数的情况下直接使用它。
在任何模块中:

 Dim DontShowMsgBox As Boolean 

如果你只是需要它进行debugging,然后把它作为一个Const ,只有当你想要它是真实的。

对于正常行为的F​​ORM控件,因为您不能根据参数分配Sub,因为button不知道交换哪个参数(出于类似的原因,您不能将function链接到button),而ActiveXbutton会创build它在它出现的工作表的代码空间中拥有Sub(例如Private Sub CommandButton1_Click() )。

所以使用一个没有参数的Sub来调用button,在子内决定DontShowMsgBox的实际情况,并调用另一个Sub来完成你input这个参数的工作。