VBA 在表格中创建和使用下拉框(xlDropdow)


http://forums.codeguru.com/showthread.php?495404-how-to-add-items-to-the-comboBox-using-VBA


ghost56
ghost56 is offline Junior Member
Join Date
Apr 2010
Posts
7

how to add items to the comboBox using VBA

I have created a comboBox1 on an excel sheet with the following statement

Set MyCombo = Shapes.AddFormControl(xlDropDown, Cells(10, 1).Left, Cells(10, 1).Top, 50, Cells(10, 1).RowHeight)

My issues are:
1.Now how to add items to the comboBox1.
2. How to create a comboBox 2 adjacent to comboBox1 when an item is clicked in comboBox1.

when i used .AddItem methosd it throws an error stating that method or property does not exist for the object. Can anyone help me to resolve these issues.
Cimperiali's Avatar
Cimperiali
Cimperiali is offline Old Uncle Moderator Power Poster
Join Date
Jul 2000
Location
Milano, Italy
Posts
7,724

Re: how to add items to the comboBox using VBA

Not sure this is a dot net question. Seems as if you're doing it inside excel.
In case, a way to do it (but user must enable macros) is the following

in a worksheet:
Code:



Private Sub Worksheet_Activate()
Dim shp As Shape
For Each shp In Me.Shapes
    If shp.Name = "cboDynamic" Then
        shp.Delete
        Set shp = Nothing
        Exit For
    End If
   Set shp = Nothing
Next
If shp Is Nothing Then
    CreateCbo
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Private Sub CreateCbo()
  
    With Me.Shapes.AddFormControl(xlDropDown, Left:=Cells(10, 1).Left, Top:=Cells(10, 1).Top, Width:=50, Height:=Cells(10, 1).RowHeight)
        .ControlFormat.DropDownLines = 3
        .ControlFormat.AddItem "First", 1
        .ControlFormat.AddItem "Second", 2
        .ControlFormat.AddItem "Third", 3
        .Name = "cboDynamic"
        .OnAction = "cboDynamic_Change"
      
    End With
  

End Sub


Public Sub cboDynamic_Change()
  
Dim selectIndex As Integer
  
  
'delete any existing dropdown box named "cboDynSecond"
'if none exists, do not throw error
 On Error Resume Next
 ActiveSheet.DropDowns("cboDynSecond").Delete
 'disable on error resume next
On Error GoTo 0
  
selectIndex = ActiveSheet.DropDowns("cboDynamic").ListIndex
  Dim dd As DropDown
  Set dd = ActiveSheet.DropDowns("cboDynamic")
  
  Dim lft As Integer
  lft = dd.Left + dd.Width + 10
  Dim tp As Integer
  tp = dd.Top
  Dim wdt As Integer
  wdt = dd.Width
  Dim hgt As Integer
  hgt = dd.Height
  Set dd = Nothing
With ActiveSheet.Shapes.AddFormControl(xlDropDown, Left:=lft, Top:=tp, Width:=wdt, Height:=hgt)
    .ControlFormat.DropDownLines = 7
    .Name = "cboDynSecond"
   
    Select Case selectIndex
  
        Case 1
            .ControlFormat.AddItem "A_01", 1
            .ControlFormat.AddItem "A_02", 2
            .ControlFormat.AddItem "A_03", 3
            .ControlFormat.AddItem "A_04", 4
        Case 2
            .ControlFormat.AddItem "B_01", 1
            .ControlFormat.AddItem "B_02", 2
            .ControlFormat.AddItem "B_03", 3
            .ControlFormat.AddItem "B_04", 4
        Case 3
            .ControlFormat.AddItem "C1", 1
            .ControlFormat.AddItem "C2", 2
            .ControlFormat.AddItem "C3", 3
            .ControlFormat.AddItem "C4", 4

  
    End Select
  .OnAction = "cboDynSecond_Click"
End With
  
End Sub

Public Sub cboDynSecond_Click()

    
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
    If shp.Name = "cboDynSecond" Then
        Exit For
    End If
   Set shp = Nothing
Next
If Not shp Is Nothing Then

    MsgBox ("you clicked on itme index" & shp.ControlFormat.ListIndex _
        & " (value is index: " & shp.ControlFormat.Value _
        & " -while text is " & shp.ControlFormat.List(shp.ControlFormat.ListIndex) _
        & ")")
End If



End Sub






你可能感兴趣的:(VBA,combox)