用预先指定的代码生成工作表button

我想按照作者的意图做更多或更less的事情:

http://ccm.net/faq/1105-adding-a-vba-commandbutton-with-its-respective-the-code

不幸的是,尽pipe代码被写入到Microsoft Excel对象中的正确表单中,但是一旦按下button,代码就不会运行。 _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 

按下button时什么都没有发生 – 在我看来,它应该按照作者的意图触发事件,任何想法为什么没有?

您正在创buildActiveX组件。 与表单组件不同,您不能根据需要命名基础macros。 macros的名称必须以ActiveX组件的名称开头,后跟和下划线以及偶数名称。

所以,如果你的ActiveX组件被命名为TestButton(根据这个):

 Obj.Name = "TestButton" 

然后,处理click事件的子名称必须命名为:

 Sub TestButton_Click() 

因此,您必须重新命名该子项,或者必须更改要匹配的ActiveX组件的名称。

另外,你也可以实现表单控件。 以下三行代码创build一个新的表单控件CheckBox ,并将其指定给它(单击时):

 Dim chk As CheckBox Set chk = ActiveSheet.CheckBoxes.Add(390.75, 216, 72, 72) chk.OnAction = "ButtonTest_Click"