使用预先分配的代码生成工作表按钮



我想或多或少地按照作者的意图来做:

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

不幸的是,尽管代码是在MicrosoftExcelObjects中写入正确的工作表的,但一旦按下按钮,代码就不会运行。_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            

按下按钮时什么都不会发生——在我看来,它应该按照作者的意图启动事件,有什么想法吗?

您正在创建ActiveX组件。与表单组件不同,您不能随心所欲地命名基础宏。宏的名称必须以ActiveX组件的名称开头,后跟下划线和偶数名称。

因此,如果您的ActiveX组件名为TestButton(根据此):

Obj.Name = "TestButton" 

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

Sub TestButton_Click()

因此,您必须重命名子,或者必须更改ActiveX组件的名称才能匹配。

或者,您也可以实现表单控件。以下三行代码创建了一个新的表单控件CheckBox,并将您的宏分配给它(单击时):

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

最新更新