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