2017-02-15 92 views
0

我已经通过VBA代码创建了一个组合框。从ComboBox获取值

Sub CreateFormControl() 

ActiveSheet.DropDowns.Add(0, 0, 100, 15).Name = "ComboBox1" 
ActiveSheet.Shapes("ComboBox1").ControlFormat.RemoveAllItems 

Dim i As Integer 
With ActiveSheet.Shapes("ComboBox1").ControlFormat 
    For i = 1 To 25 
     .AddItem i 
    Next i 
End With 
ActiveSheet.Shapes.Range(Array("ComboBox1")).Select 
Selection.OnAction = "ComboBox1_Change" 
Range("B2").Select 

End Sub 

这里的问题是,当我在ComboBox选择一个项目,它给了我一个

运行时错误424所需的对象

它不显示所选值。我也尝试将我的声明Sub CreateFormControl()更改为公开Sub CreateFormControl(),但它仍然不起作用。

Sub ComboBox1_Change() 

MsgBox (ComboBox1.Value) 'The error is here 

End Sub 

回答

2

尝试下面的代码,尝试用组队参加Worksheet更换ActiveSheet,像Worksheets("YoutSheetName")

Sub ComboBox1_Change() 

Dim ws As Worksheet 
Dim MyDropDown As DropDown 

' try not to use ActiveSheet, replace "Sheet1" with your sheet's name 
Set ws = Worksheets("Sheet1") ' ActiveSheet 
Set MyDropDown = ws.Shapes("ComboBox1").OLEFormat.Object ' <-- set my Object with "ComboBo1" drop-down 

MsgBox MyDropDown.List(MyDropDown.ListIndex) '<-- display the value of the selected item 

End Sub 

下面是一个“干净”的方式来添加新DropDownWorksheet不使用ActiveSheetSelectSelection(只使用完全合格的对象)。

子CreateFormControl代码

Option Explicit 

Sub CreateFormControl() 

Dim MyDropDown As DropDown 
Dim i As Long 

' set the drop-down object to the new created drop-down (replace "Sheet1" with your sheet's name) 
Set MyDropDown = Worksheets("Sheet1").DropDowns.Add(0, 0, 100, 15) 

' modify the drop-down properties 
With MyDropDown 
    .Name = "ComboBox1" 

    .RemoveAllItems 
    For i = 1 To 25 
     .AddItem i 
    Next i 

    .OnAction = "ComboBox1_Change" 
End With 

End Sub 
+0

感谢夏嘉曦它的工作原理。令人惊叹的... – Vincent

+0

@DaveRyan欢迎您:) –