如何在Excel中创建动态按钮

giz*_*gok 4 excel vba excel-2007 excel-vba

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

Mik*_*keD 7

我假设您将在查询填满表格后搜索条件并"执行操作".因此,我假设您要放置按钮的位置由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
Run Code Online (Sandbox Code Playgroud)

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

Private Sub MyPrecodedButton_Click()
    MsgBox "Co-Cooo!"
End Sub
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

希望有所帮助 - 祝你好运