【问题标题】:Excel 2007 VBA to add a buttonExcel 2007 VBA 添加按钮
【发布时间】:2015-11-12 23:16:35
【问题描述】:

我正在尝试编写一些代码来自动将一个按钮放入我的工作表中,当单击该按钮时它将执行一些代码。我根据从“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*

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

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

非常感谢!

【问题讨论】:

  • 其他问题:如何将其转换为加载项,以便可以在任何工作簿上运行以放置按钮?

标签: vba excel button activex


【解决方案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 将相同,因此您的原始行在这种情况下可以工作,但如果工作表或其代码模块被重命名,则会失败。

【讨论】:

  • 有效!非常感谢!现在我要去扩展代码部分......希望它仍然可以工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2019-03-28
  • 2010-12-12
相关资源
最近更新 更多