2012-05-16 57 views
0

我有一個循環,我在其中添加ActiveX按鈕在一個特定的工作表。但不管多大的循環,它只增加一個按鈕。 循環在工作表的行上。每次它應該到新行並添加一個按鈕。但第一次來到一排,添加按鈕,然後功能終止。即使添加動態按鈕的行後寫msgbox也不會執行。 下面是代碼:動態添加ActiveX中不起作用的ActiveX按鈕VBA

Public Function AddButton(strSheetName, counter) 
Dim btn As OLEObject 
Dim cLeft, cTop, cWidth, cHeight 
    With Worksheets(strSheetName).Range("J" & (6 + counter)) 
     cLeft = .Left 
     cTop = .Top 
     cWidth = .Width 
     cHeight = .Height 
    End With 
    With Worksheets(strSheetName) 
     btn = .OLEObjects.Add(ClassType:="Forms.Label.1", Link:=True, DisplayAsIcon:=False, Left:=cLeft, Top:=cTop, Width:=cWidth, Height:=cHeight) 
    End With 
    MsgBox "After Adding button" 
End Function 

現在這個函數獲取調用在一個循環。在第一次迭代中,函數將一個按鈕添加到所需位置,並在添加按鈕後立即將此函數和調用函數(因此循環)終止。即使msgbox(添加按鈕後)也不會執行。

可能是什麼原因?任何幫助? 在此先感謝 Akki J

回答

1

您在btn =代碼之前缺少SET命令。

而且你並不需要一個功能爲這個:)試試這個(久經考驗

Option Explicit 

Sub Sample() 
    Dim i As Long 

    For i = 1 To 5 
     AddButton "Sheet1", i 
    Next i 
End Sub 

Public Sub AddButton(strSheetName As String, counter As Long) 
    Dim btn As OLEObject 
    Dim cLeft, cTop, cWidth, cHeight 

    With Worksheets(strSheetName).Range("J" & (6 + counter)) 
     cLeft = .Left 
     cTop = .Top 
     cWidth = .Width 
     cHeight = .Height 
    End With 
    With Worksheets(strSheetName) 
     Set btn = .OLEObjects.Add(ClassType:="Forms.Label.1", Link:=True, _ 
     DisplayAsIcon:=False, Left:=cLeft, Top:=cTop, Width:=cWidth, _ 
     Height:=cHeight) 
    End With 

    MsgBox "After Adding button" 
End Sub 
+0

它的工作。你搖滾的夥計。我是Excel VBA中的新成員。不知道發生了什麼。此外,這是什麼選項明確 –

+0

選項顯式是「老大哥正在看你!」 ;)看到這個鏈接第2點(http://siddharthrout.wordpress.com/2011/08/01/to-err-is-human/) –

+0

明白了。感謝幫助。 –