我正在尝试创建一个可以创建按钮的类。该按钮应该有一个宏指定给它。宏是该类的函数。
类模块的代码如下:
'Class Module: btnClass
Option Explicit
Dim btn As Button
Function addButton()
'Adding a button
Set btn = ActiveSheet.Buttons.Add( _
Range("A1").Left, _
Range("A1").Top, _
Range("A1").Width, _
Range("A1").Height)
With btn
'Assigning a function
.OnAction = Me.onClickAction
.Caption = "Button"
End With
End Function
Function onClickAction()
MsgBox ("Click")
End Function
主宏的代码如下:
'Module
Option Explicit
Sub main()
Dim btnInstance As btnClass
Set btnInstance = New btnClass
'Calling a function of the instance that creates a button
Call btnInstance.addButton
End Sub
上面的代码成功创建了一个按钮。但是,分配给按钮的功能会立即运行(在创建按钮后,而不是在我单击它时),并且只运行一次(当您稍后单击按钮时,没有任何反应)。
VBA中是否有办法使用类模块实现所需的功能(想要创建一个不依赖于外部函数的类)?
答案 0 :(得分:1)
要扩展Rory的评论,你的课程需要这样的东西:
Public WithEvents Button As CommandButton
Private Sub Class_Initialize()
Set Me.Button = Sheet1.OLEObjects("Thebutton").Object
End Sub
Private Sub Button_Click()
MsgBox "Foo"
End Sub
然后在普通模块中创建该类的公共实例,使其保留在memmory中:
Public myButt As ButtonClass
Public Sub AddEvent()
Set myButt = New ButtonClass
End Sub
请注意,只有当类的实例保留在内存中时,才会处理click事件。如果您关闭工作簿并再次打开它,将不再处理该事件。
编辑:我忘了提及,你需要设置一个对Microsoft Forms的引用,以声明一个CommandButton类型的变量。