0

我有一个循环,在其中我在特定工作表中添加 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

4

1 回答 1

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
于 2012-05-16T10:15:28.980 回答