直接将模块function分配给ActiveX命令button
在VBA for Excel中,如何将模块中的现有函数或子集myFun()分配给新添加的ActiveX单击button?
我知道我可以在ActiveX命令(单击)button所在的工作表代码页上执行以下操作。
Private Sub myFun_Click() myFun() End Sub
“直接”我的意思是命名button“myFun”,并将button直接指向函数myFun()必须将myFun()放在另一个子上面,如上所示。
有两种types的控件可以放在工作表上:
-
ActiveX控件
您可以在代码隐藏中处理它们的
Click
事件,方法是双击控件并为其生成处理程序。 -
表单控件
您为这些控件分配一个macros ,就像您将macros指定给任何其他形状一样 。 macros可以是现有的(非私有标准模块中的任何无参数
Public Sub
过程)。
如果你想分配一个button到MyFun
,假设签名看起来像这样:
Public Sub MyFun()
然后,您可以尝试使用表单控件而不是ActiveX控件。
注意:MyFun()必须是一个Sub才能被暴露为一个macros。 “Sub”是一个过程 ,而不是一个function 。 一个'函数'有一个返回值,'Sub'不是。 一个标准代码模块(.bas)中的函数可以暴露在工作表公式中作为UDF使用,标准代码模块(.bas)中的“Sub”可以被暴露以用作macros 。
绑定到控件的VBA事件通过定义对工作表是“本地”的,因此如果在工作表“w1”上放置button“A”,则产生的click事件处理函数将被命名为:
Private Sub A_Click()
但是,如果在工作表“w2”上放置button“A”,则单击事件处理程序签名将相同,但实际上会触发放置在“w2”上的button的单击事件。
如果要在用户从不同工作表中单击button“A”时实现相同的行为,则需要在工作簿对象的所有工作表中共享的VBA 模块上添加一个子/函数。
Private Sub A_Click() { CommonFunction() }
- 将XML数据推送到Excel表格时,ActiveX控件移动
- Excel 2013到2010与ActiveX的向后兼容性问题(不是Dec14th更新问题)
- 在Excel vba中更改代码名称和ActiveX控件的形状名称
- Excel VBA:closures保存ActiveX大小后提示大小尽pipeThisworkbook.aved = True
- 通过MATLAB ActiveX服务器恢复Excel工作表中的CustomView设置
- 如何创build一个ActiveXbutton,并添加代码(告诉它运行什么子)使用VBA?
- 在Qt中格式化Excel文档
- 通过跳转来启用Excel表单导航
- 使用Activex控件查看Excel文件