在不在Excel VBA中工作的循环中动态添加activeX按钮

时间:2012-05-16 10:10:08

标签: excel excel-vba vba

我有一个循环,我在其中添加特定工作表中的ActiveX按钮。但无论多大的循环,它只添加一个按钮。 循环在工作表的行上。每次它应该到新行并添加一个按钮。但是第一次连接,添加按钮然后功能终止。甚至在添加动态按钮的行之后写入的msgbox也不会执行。 以下是代码:

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 个答案:

答案 0 :(得分: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