分配上单击VBA函数,在Excel中用户窗体动态创建的按钮
-
05-09-2019 - |
题
我动态创建的按钮上的Excel用户窗体用下面的代码:
With Me.CurrentFrame.Controls.Add("Forms.CommandButton.1")
.Caption = "XYZ"
.name = "AButton"
.Font.Bold = True
.ForeColor = &HFF&
... blah blah blah
End With
我想分配给点击这些按钮时运行的功能,但我不能找到一个简单的方法来做到这一点,因为没有财产作为按钮本身的一部分。
有没有办法做到这一点使用上述成语?我应该去了解这件事以不同的方式?
解决方案
您需要动态地创建代码/事件处理程序为每个按钮。
这需要一点做的 - 在这里看到: http://navpadexcel.blogspot.com /2006/11/httpwwwcpearsoncomexcelvbehtm.html
有一个更好的办法可能是创建一批在窗体上按钮(很多,你认为你需要)的时间提前。创建事件处理程序代码。让它们最初是隐藏的。
然后当你的窗体打开,你可以动态地改变按钮标题,使其可见和移动它们。最初创建的事件代码将被链接到按预期的方式激活按钮。
其他提示
要在Excel形式动态地添加的控制事件;你需要在类模块首先添加事件(一个或多个)。在我的例子,我要添加一个名为另clsTest类模块有一个事件,btn_click()
'#### CLASS NAMED clsTEST
Public WithEvents btn As MSForms.CommandButton
Public frm As UserForm
Dim iCount As Long
Private Sub btn_Click()
iCount = IIf(iCount < 1, 1, iCount + 1)
btn.Caption = "Count " & Str(iCount)
End Sub
'### END CLASS
正如你所看到的,这会做的唯一事情是设置按钮上的标题为那么许多,你点击它倍。 接着,在形式代码输入以下命令:
Dim mColButtons As New Collection '## SET A NEW COLLECTION
Private Sub UserForm_Activate()
'
Dim btnEvent As clsTEST
Dim ctl As MSForms.Control
'
Set ctl = Me.Controls.Add("Forms.CommandButton.1")
'
With ctl
.Caption = "XYZ"
.Name = "AButton"
END With
'
Set btnEvent = new clsTEST
Set btnEvent.btn = ctl
set btnEvent.frm = Me
'
mColButtons.add btnEvent
'End Sub
在激活形式时,其将创建的按钮。每次点击按钮上的标题会改变。
在下面的代码应该是工作
Dim NewButton As OLEObject
Dim CodeModule As Object
Set NewButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=52.5, Top:=Hght, _
Width:=202.5, Height:=26.25)
NewButton.Object.Caption = "Click Me!"
Set CodeModule = ActiveWorkbook.VBProject.VBComponents.VBE.ActiveCodePane.CodeModule
CodeModule.InsertLines CodeModule.CreateEventProc("Click", NewButton.Name) + 1, vbTab & "MsgBox ""Hello world"""
Sub Oval1_Click()
file = ActiveWorkbook.Name
Set Output = Workbooks.Add()
ActiveWorkbook.SaveAs Filename:="Try.xls"
Sheets(1).Select
ActiveSheet.Buttons.Add(460, 10, 140, 30).Select
ActiveSheet.Buttons.Text = "DATA"
ActiveSheet.Shapes("Button 1").Select
Selection.OnAction = "Book1.xlsm!data_Click"
End Sub
Sub data_Click()
MsgBox "you have clicked me"
ActiveSheet.DrawingObjects.Delete
End Sub
我一直在寻找这一点。似乎可以通过使用的onClick属性运行宏:
Command1.OnClick = "Macro1"
然后,创建由运行所需的功能该名称的宏。 这是我解决这个砍,直到我找到更好的东西。
不隶属于 StackOverflow