首页 文章

Excel 2007 VBA添加按钮

提问于
浏览
1

我正在尝试编写一些代码来自动将一个按钮放入我的工作表中,当单击按钮时它将执行一些代码 . 我根据我从“Excel 2013 Power Programming with VBA”(p896)一书中看到的例子编写了我的代码 . 我使用的是Excel 2007但不确定它是否重要 . 无论如何,我修改了以下代码:

*Sub AddButtonAndCode()  
Dim NewButton As OLEObject  
Dim NewSheet As Worksheet  
Set NewSheet = Worksheets("Sheet1")  
Set NewButton = NewSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=5, Top:=5, Height:=25, Width:=100)  
Code = "Sub CommandButton1_Click()" & vbCrLf  
Code = Code & "  MsgBox ""???""" & vbCrLf  
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(NewSheet.Name).CodeModule
    NextLine = .CountOfLines + 1
    .InsertLines NextLine, Code
End With
End Sub*

它适用于按钮部分,但在我添加下面定义按钮的部分之后,它给出了错误“下标超出范围”

谁能帮我弄清楚那里有什么问题?

非常感谢你!

1 回答

  • 1

    您的代码可以通过几个调整为我工作 .

    Sub AddButtonAndCode()
    
        Dim NewButton As OLEObject
        Dim NewSheet As Worksheet, Code As String
        Dim nextline As Long
    
        Set NewSheet = Worksheets("Sheet1")
    
        Set NewButton = NewSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                           Left:=5, Top:=5, Height:=25, Width:=100)
    
        NewButton.Name = "CommandButton1"  '<<<<<<<<< ensure correct name
    
        Code = "Sub CommandButton1_Click()" & vbCrLf
        Code = Code & "  MsgBox ""???""" & vbCrLf
        Code = Code & "End Sub"
    
        'Use NewSheet.CodeName not NewSheet.Name
        With ActiveWorkbook.VBProject.VBComponents(NewSheet.CodeName).CodeModule
            nextline = .CountOfLines + 1
            .InsertLines nextline, Code
        End With
    
    End Sub
    

    在新工作簿中,工作表的 NameCodeName 将是相同的,因此在这种情况下您的原始行将起作用,但如果重命名工作表或其代码模块,则会失败 .

相关问题