你可以用一个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
,只有当你想要它是真实的。
对于正常行为的FORM控件,因为您不能根据参数分配Sub,因为button不知道交换哪个参数(出于类似的原因,您不能将function链接到button),而ActiveXbutton会创build它在它出现的工作表的代码空间中拥有Sub(例如Private Sub CommandButton1_Click()
)。
所以使用一个没有参数的Sub来调用button,在子内决定DontShowMsgBox
的实际情况,并调用另一个Sub来完成你input这个参数的工作。