giz*_*gok 4 excel vba excel-2007 excel-vba
我正在使用数据库值填充我的电子表格.现在,如果我填充了30行,那么我想在第31行或第32行创建动态按钮以执行某些操作.将填充的行数不固定.如何我这样做
我假设您将在查询填满表格后搜索条件并"执行操作".因此,我假设您要放置按钮的位置由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)"等等 - 但你有充分的理由按照自己的方式去做.
希望有所帮助 - 祝你好运