我想或多或少地按照作者的意图去做:
http://ccm.net/faq/1105-adding-a-vba-commandbutton-with-its-respective-the-code
不幸的是,虽然代码被写入Microsoft Excel对象中的正确工作表,但按下按钮后代码不会运行。 _Click()
就在这里:
Sub ButtonTest_Click()
MsgBox "I am supposed to work!" 'but i dont, i actually do nothing
End Sub
其余代码如下:
Sub CreateButton()
Dim Obj As Object
Dim Code As String
Sheets("Sheet1").Select
'create button
Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35)
Obj.Name = "TestButton"
'buttonn text
ActiveSheet.OLEObjects(1).Object.Caption = "Test Button"
'macro text
Code = "Sub ButtonTest_Click()" & vbCrLf
Code = Code & "Msgbox ""I am supposed to work!""" & vbCrLf
Code = Code & "End Sub"
'add macro at the end of the sheet module
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
.insertlines .CountOfLines + 1, Code
end With
End Sub
当按下按钮时没有任何反应 - 在我的脑海里看起来它应该像作者想要的那样触发事件,任何想法为什么它没有?
答案 0 :(得分:0)
您正在创建ActiveX组件。与表单组件不同,您无法根据需要为底层宏命名。宏名称必须以ActiveX组件的名称开头,后跟和下划线以及偶数名称。
因此,如果您的ActiveX组件名为TestButton(根据此):
Obj.Name = "TestButton"
然后,处理click
事件的子名称必须命名为:
Sub TestButton_Click()
因此,您必须重命名sub,或者必须更改ActiveX组件的名称以匹配。
或者,您也可以实现表单控件。以下三行代码创建一个新的表单控件CheckBox
并将宏指定给它(单击时):
Dim chk As CheckBox
Set chk = ActiveSheet.CheckBoxes.Add(390.75, 216, 72, 72)
chk.OnAction = "ButtonTest_Click"