2017-02-15 91 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歡迎您:) –