我动态创建的按钮上的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"

然后,创建由运行所需的功能该名称的宏。 这是我解决这个砍,直到我找到更好的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top