从ComboBox获取一个值

我通过VBA代码创build了一个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框中select一个项目,它给了我一个

运行时错误424.对象需要

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

 Sub ComboBox1_Change() MsgBox (ComboBox1.Value) 'The error is here End Sub 

尝试下面的代码,尝试用一个合格的WorksheetreplaceActiveSheet ,如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 (只使用完全限定的对象)。

Sub 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