直接将模块功能分配给 ActiveX 命令按钮
Assign module function to ActiveX command button DIRECTLY
在 VBA for Excel 中,如何将模块中的现有函数或子函数(例如 myFun())直接分配给新添加的 ActiveX 单击按钮?
我知道我可以在 ActiveX 命令(单击)按钮所在的工作表代码页上执行以下操作。
Private Sub myFun_Click()
myFun()
End Sub
"directly" 我的意思是将按钮命名为 "myFun" 并将按钮直接指向函数 myFun() ,而必须将 myFun() 放在另一个子中,如上所示。
VBA 绑定到控件的事件根据定义 "local" 到工作表,因此如果您将按钮 "A" 放在工作表 "w1" 上,生成的单击事件处理函数将被命名为:
Private Sub A_Click()
但是如果您将按钮 "A" 放在工作表 "w2" 上,点击事件处理程序签名将相同但实际上会触发放置在 "w2" 上的按钮的点击事件。
如果您希望在用户单击不同工作表中的按钮 "A" 时实现相同的行为,则需要通过在 VBA 上添加 Sub/Function 模块,工作簿对象的所有工作表共享。
Private Sub A_Click() {
CommonFunction()
}
您可以在工作表上放置 2 种类型的控件:
ActiveX 控件
您在代码隐藏中处理他们的 Click
事件,方法是双击控件并为其生成处理程序。
表单控件
您将宏分配给这些控件,就像您将宏分配给任何其他形状一样。宏可以是现有的(非私有标准模块中的任何无参数 Public Sub
过程)。
如果要将按钮分配给 MyFun
,假设签名如下所示:
Public Sub MyFun()
那么您可以尝试使用 表单控件 而不是 ActiveX 控件。
注意:MyFun() 必须是一个 Sub 才能作为宏公开。 'Sub' 是一个 过程 ,而不是 函数 。 'Function' 有一个 return 值,'Sub' 没有。可以公开标准代码模块 (.bas) 中的函数以在工作表公式中用作 UDF,可以公开标准代码模块 (.bas) 中的 'Sub' 以用作 宏.
在 VBA for Excel 中,如何将模块中的现有函数或子函数(例如 myFun())直接分配给新添加的 ActiveX 单击按钮?
我知道我可以在 ActiveX 命令(单击)按钮所在的工作表代码页上执行以下操作。
Private Sub myFun_Click()
myFun()
End Sub
"directly" 我的意思是将按钮命名为 "myFun" 并将按钮直接指向函数 myFun() ,而必须将 myFun() 放在另一个子中,如上所示。
VBA 绑定到控件的事件根据定义 "local" 到工作表,因此如果您将按钮 "A" 放在工作表 "w1" 上,生成的单击事件处理函数将被命名为:
Private Sub A_Click()
但是如果您将按钮 "A" 放在工作表 "w2" 上,点击事件处理程序签名将相同但实际上会触发放置在 "w2" 上的按钮的点击事件。
如果您希望在用户单击不同工作表中的按钮 "A" 时实现相同的行为,则需要通过在 VBA 上添加 Sub/Function 模块,工作簿对象的所有工作表共享。
Private Sub A_Click() {
CommonFunction()
}
您可以在工作表上放置 2 种类型的控件:
ActiveX 控件
您在代码隐藏中处理他们的
Click
事件,方法是双击控件并为其生成处理程序。表单控件
您将宏分配给这些控件,就像您将宏分配给任何其他形状一样。宏可以是现有的(非私有标准模块中的任何无参数
Public Sub
过程)。
如果要将按钮分配给 MyFun
,假设签名如下所示:
Public Sub MyFun()
那么您可以尝试使用 表单控件 而不是 ActiveX 控件。
注意:MyFun() 必须是一个 Sub 才能作为宏公开。 'Sub' 是一个 过程 ,而不是 函数 。 'Function' 有一个 return 值,'Sub' 没有。可以公开标准代码模块 (.bas) 中的函数以在工作表公式中用作 UDF,可以公开标准代码模块 (.bas) 中的 'Sub' 以用作 宏.