Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 以编程方式插入动态生成的标签不工作的单击事件代码_Excel_Vba - Fatal编程技术网

Excel 以编程方式插入动态生成的标签不工作的单击事件代码

Excel 以编程方式插入动态生成的标签不工作的单击事件代码,excel,vba,Excel,Vba,我正在使用VBA代码在excel工作表中插入ActiveX控件标签。现在,在插入按钮后,我尝试插入click事件代码,但它不起作用。代码如下: Public Function AddButton(strSheetName, counter) Dim btn As OLEObject Dim cLeft, cTop, cWidth, cHeight Dim CodeModule As Object With Worksheets(strSheetName).Range("J" &

我正在使用VBA代码在excel工作表中插入ActiveX控件标签。现在,在插入按钮后,我尝试插入click事件代码,但它不起作用。代码如下:

Public Function AddButton(strSheetName, counter)
Dim btn As OLEObject
Dim cLeft, cTop, cWidth, cHeight
Dim CodeModule As Object
    With Worksheets(strSheetName).Range("J" & (6 + counter))
        cLeft = .Left + 1
        cTop = .Top + 1
        cWidth = .Width - 2
        cHeight = .Height - 2
    End With
    With Worksheets(strSheetName)
        Set btn = .OLEObjects.Add(ClassType:="Forms.Label.1", Link:=True, DisplayAsIcon:=True, Left:=cLeft, Top:=cTop, Width:=cWidth, Height:=cHeight)
    End With
    btn.Object.Caption = "Add New"
    btn.Name = Left(strSheetName, 3) & counter
    Set CodeModule = ActiveWorkbook.VBProject.VBComponents.VBE.ActiveCodePane.CodeModule
    CodeModule.InsertLines CodeModule.CreateEventProc("Click", btn.Name) + 1, vbTab & "MsgBox ""Hello world"""
End Function
按钮正在插入,但单击事件代码不起作用。当我点击时,什么也没发生。这个函数也在循环中被调用。当它第一次添加按钮,然后尝试添加click事件代码时,循环终止,这意味着出现错误

有什么帮助吗


提前谢谢。

我相信这是你最后一个问题的继续

这就是你想要的吗

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
    btn.Object.Caption = "Add New"

    btn.Name = Left(strSheetName, 3) & counter

    With ActiveWorkbook.VBProject.VBComponents( _
    ActiveWorkbook.Worksheets(strSheetName).CodeName).CodeModule
        .InsertLines Line:=.CreateEventProc("Click", btn.Name) + 1, _
        String:=vbCrLf & _
        "MsgBox ""Hello world"""
    End With
End Sub
跟进

是的,从整个Excel项目的特定工作表中清除代码。这就是要求——用户1269291 54秒前


使用ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Worksheets(strSheetName).CodeName).CodeModule.InsertLines行:=.CreateEventProc(“单击”,btn.Name)+1,String:=vbCrLf&u“MsgBox”“Hello world”“”以此代码结尾,它将插入单击事件代码,但当我单击标签时,msg框不出现,这意味着代码没有执行,只是在工作表的代码后面插入了点击事件代码。谢谢Siddharth,现在开始。我有一个工具要在一种我根本不知道的技术(Excel VBA)中开发。但在我的公司里是这样的。您的帮助非常有价值,如果我通过代码动态删除按钮,它不会删除我们从上述代码生成的点击代码。当按钮被代码删除时,是否有任何方法可以删除单击事件代码。对于删除按钮,我正在执行以下操作:不假设通过代码添加了5个按钮,只有单击事件代码(再次从代码生成)存在,并且所有代码都需要删除,因为所有按钮将在一次快照中删除,然后我们可以编写一个通用代码来清除表1中的所有代码。这样行吗?
Option Explicit

Sub Sample()
    Dim strSheetName As String

    strSheetName = "Sheet1"

    With ActiveWorkbook.VBProject.VBComponents( _
    ActiveWorkbook.Worksheets(strSheetName).CodeName).CodeModule
        .DeleteLines 1, .CountOfLines
    End With
End Sub