如何在Excel中创建动态按钮

时间:2010-08-23 16:29:15

标签: excel-vba excel-2007 vba excel

我正在使用数据库值填充我的电子表格。现在,如果我填充了30行,那么我想在第31行或第32行创建动态按钮以执行某些操作。将填充的行数不固定我怎么能这样做。

1 个答案:

答案 0 :(得分:6)

我假设您在查询填满表格,搜索条件和“做东西”后循环查看记录。因此,我假设您要放置按钮的位置由ActiveSheet()中的Range()对象表示

因此,让我们在该位置创建一个动态ActiveX按钮:

Sub CreateDynamicButton()
Dim MyR As Range, MyB As OLEObject
Dim MyR_T As Long, MyR_L As Long


    Set MyR = Range("C110") 'just an example - you get that from your own script
    MyR_T = MyR.Top         'capture positions
    MyR_L = MyR.Left        '...
    'create button
    Set MyB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False)

    'set main button properties
    With MyB
        .Name = "MyPrecodedButton"     'important - code must exist ... see below
        .Object.Caption = "MyCaption"
        .Top = MyR_T
        .Left = MyR_L
        .Width = 50
        .Height = 18
        .Placement = xlMoveAndSize
        .PrintObject = True            'or false as per your taste
    End With

End Sub

如果 - 提前 - 您已在活动表单中创建了以下例程

Private Sub MyPrecodedButton_Click()
    MsgBox "Co-Cooo!"
End Sub

然后按下上面创建的按钮(在XP / SP2 + Excel 2003下测试)后会出现一个很好的消息框。

Create例程不询问是否存在同名按钮,您需要采取措施仅使用相同名称创建一次。如果你两次调用例程,.Name = "..."将默默地失败,并开始命名按钮“CommandButton1”并向上。

因此,您现在应该拥有所有成分来创建按钮。如果他们需要采取不同的行动,他们每个人都需要有一个预编程序。我应该提一下,你不能在OLE对象的cration之后调试(逐步执行)Create例程,因为控件是在Excel之外传输的 - “这不是bug,它是一个功能!”

我必须承认,这听起来有点不寻常,我可能不希望安装动态按钮作用于预先编码的Sub,而是我会在查询通过复选框提供选项之前进行初始对话,例如“X后截断”行(Y / N)“等等 - 但你有充分的理由按照自己的方式行事。

希望有所帮助 - 祝你好运

相关问题