直接将模块功能分配给ActiveX命令按钮

时间:2016-01-29 21:10:19

标签: excel vba button activex

在VBA for Excel中,如何将模块中的现有函数或子(例如myFun())直接分配给新添加的ActiveX单击按钮?

我知道我可以在ActiveX命令(单击)按钮所在的工作表代码页上执行以下操作。

Private Sub myFun_Click()
myFun()
End Sub

直接"直接"我的意思是命名按钮" myFun"并将按钮直接指向函数myFun(),必须将myFun()放在另一个子中,如上所示。

2 个答案:

答案 0 :(得分:1)

受控制的VBA事件是"本地"通过定义到工作表,因此,如果你把按钮" A"在工作表上" w1"生成的单击事件处理函数将命名为:

Private Sub A_Click()

但是如果你按下按钮" A"在工作表" w2" click事件处理程序签名将是相同的,但实际上触发了放置在" w2"上的按钮的click事件。

如果你想在用户点击按钮时实现相同的行为,那么#34; A"从不同的工作表中,您需要通过在VBA 模块上添加子/函数来完成此操作,该工作簿对象的所有工作表共享。

Private Sub A_Click() {
     CommonFunction()
}

答案 1 :(得分:1)

您可以在工作表上放置两种类型的控件:

  • ActiveX控件

    您可以通过双击控件并为其生成处理程序来处理代码隐藏中的Click事件。

  • 表单控件

    为这些控件分配宏,就像您将宏指定给任何其他形状一样。宏可以是现有宏(非私有标准模块中的任何无参数Public Sub过程)。

如果要为MyFun分配按钮,假设签名如下所示:

Public Sub MyFun()

然后,您可以尝试使用表单控件而不是ActiveX控件。

注意:MyFun()必须是要作为宏公开的Sub。 A' Sub'是过程,而不是函数。 A'功能'有一个返回值,一个' Sub'没有按'吨。标准代码模块(.bas)中的函数可以公开,在工作表公式中用作UDF,' Sub'在标准代码模块(.bas)中可以公开以用作