Excel 如何在vba中调用已分配给按钮的函数

Excel 如何在vba中调用已分配给按钮的函数,excel,vba,Excel,Vba,我尝试在excel中创建一个功能区,我成功了。现在我已经为按钮指定了一个宏 Function delete_cells(control As IRibbonControl) 现在,我创建了另一个宏,需要从中调用函数delete\u cells。我试着这样称呼它 Function modify_cells(control As IRibbonControl) delete_cells End Sub 我得到一个错误,说参数不是可选的。请帮助我解决此错误。在您的函数delete_cells(控件

我尝试在excel中创建一个功能区,我成功了。现在我已经为按钮指定了一个宏

Function delete_cells(control As IRibbonControl)
现在,我创建了另一个宏,需要从中调用函数
delete\u cells
。我试着这样称呼它

Function modify_cells(control As IRibbonControl)
delete_cells
End Sub

我得到一个错误,说参数不是可选的。请帮助我解决此错误。

在您的
函数delete_cells(控件作为IRibbonControl)
中,您有一个必需的参数
…(控件作为IRibbonControl)
。调用函数时,它应该如下所示:

Function modify_cells(control As IRibbonControl)
delete_cells(myControl) 'myControl is your variable. Define what control you want to pass to the function.
End Sub

我建议您创建一个单独的子例程,从按钮的OnAction和您想从中调用它的任何其他地方调用它,例如:

'button macro
Sub cmdDeleteCells_OnAction(control as iRibbonControl)
DeleteCells
End Sub

'another Sub that calls the delete routine
Sub SomeOtherSub
DeleteCells
End Sub

'the one they're all talking about
Sub DeleteCells
msgbox "All your cells are toast, bwah hah hah ha!"
End Sub
编辑:如果你真的想调用按钮的OnAction子对象,你还需要给它传递一个iRibbonControl对象,所以声明一个假的对象:

Sub CallTheButtonsCode()
Dim FakeControl As IRibbonControl

cmdDeleteCells_OnAction FakeControl
End Sub

出于代码维护的原因,我确实不建议使用此选项,但它确实有效。

您的
函数
需要
控件
参数。您需要这样提供:
delete_cells control
。Doug Glancy,现在我正在使用您建议的方法。但我想知道是否有一种方法可以不使用额外的Sub。因为我是vba新手,所以我对控件不太了解。那么我应该向函数delete_cells传递什么样的控件呢?我只想执行函数delete_cells,我按下为modify_cells指定的按钮。我建议使用@Doug Glancy的建议。如果您想去掉额外的sub,可以将代码直接粘贴到所有过程中,从那里运行代码,但我认为这不是一个好的做法。道格所说的
Sub SomeOtherSub DeleteCells End Sub
是没有必要的,你根本不需要它。这只是一个演示,您可以从不同的位置调用
DeleteCells