在工作表中动态添加组合框

下面的示例将在Excel工作表中动态添加多个组合框,组合框的内容可以在程序中进行定义。
首先,在VBE中插入一个类模块,并命名为“clsCtrlArr”,其代码如下:
Option Explicit
Public WithEvents ctl As ComboBox
Private Sub ctl_Change()
  Cancel = True
  MsgBox ctl.Name
End Sub

然后,新建一个模块,在其中输入下面的代码:
Option Explicit
Public cmbArea() As New clsCtrlArrSub InsertMyComboBox()
    Dim MyRange As String, MyComboBox
    MyRange = ActiveCell.Address(0, 0)
    Set MyComboBox = ActiveSheet.OLEObjects.Add(ClassType:=”Forms.ComboBox.1″, _
        Left:=Range(MyRange).Left, Top:=Range(MyRange).Top, _
        Width:=Range(MyRange).Width + 2, Height:=Range(MyRange).Height + 2).Object
    ActiveSheet.Shapes(”ComboBox1″).Name = “cmb” & MyRange
    
    Range(MyRange).Offset(2).Activate
    
    Application.OnTime Now + TimeValue(”00:00:01″), “AreaShape”
    
End Sub

Private Sub AreaShape()
    Dim sh As Shape, i As Long
    i = 0
    For Each sh In ActiveSheet.Shapes
       If Left(sh.Name, 3) = “cmb” Then
          ReDim Preserve cmbArea(i)
          Set cmbArea(i).ctl = sh.OLEFormat.Object.Object
          i = i + 1
       End If
    Next
    cmbFill
End Sub

Private Sub cmbFill()
    Dim sp
    For Each sp In cmbArea()
        With sp.ctl
            .Clear
            .FontSize = 8
            .AddItem “First”
            .AddItem “Second”
            .AddItem “Third”
        End With
    Next
End Sub

运行过程InsertMyComboBox,则会1秒后在当前单元格下方第二个单元中插入一个组合框,其内容为过程cmbArea所定义的内容。且组合框的大小与单元格的大小一致。
如果运行程序后,出现编译错误,则可以先在工作表中手动插入一个组合框,再运行程序,然后删除刚才插入的组合框,此时,程序运行就正常了。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

留下回复