2016-08-02 54 views
1

我想這樣做或多或少筆者在這裏意:生成具有預先分配的代碼工作表按鈕

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    

什麼也不會發生當按鈕pressed-在我看來,它看起來像它應該觸發預期事件作爲作家,任何想法爲什麼沒有?

+1

'TestButton'和'ButtonTest_Click'不匹配。重命名按鈕或過程,然後重試。 – Mikegrann

+1

將'Obj.Name =「TestButton」'更改爲'Obj.Name =「ButtonTest」'。按鈕的名稱和子組的名稱必須與ActiveX組件一致。 – Ralph

+0

不能相信我錯過了,添加一個答案麥克和大綠色的蜱是你的。 – User632716

回答

0

您正在創建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"