2011-10-10 88 views

回答

2

這是你要找的東西..它應該讓你開始,只需調整表和範圍以滿足您的需求。

Dim cmb as ComboBox 
    Dim rng as Range 

    Set cmb = Worksheets("Sheet1").ComboBox1 

    'To fill based on range 
    For Each rng in Worksheets("Sheet2").Range("C2:C300") 
    Cmb.AddItem Rng.Value 
    Next 

    'To fill from table where ListColumns(N) is the specific column 
    Set rng = Sheet2.ListObject(1).ListColumns(3).Range 
    For Each rng in rng 
    Cmb.AddItem Rng.Value 
    Next 

    Cmb.ListIndex = 0 

* 編輯: *克里斯是正確的,我原來的代碼有錯誤。在上班途中發佈的答案沒有時間檢查。上面的代碼工作正常。克里斯建議只使用.value來填充更快。我真的不知道你可以這樣做。

+1

-1草率代碼,不編譯:正確的參考表中的數據是'工作表(「Sheet 2中」)ListObjects(1 ).ListColumns(3)。數據BodyRange'。假設組合框是表單上的* ActiveX *組合(可能是真的,但需要說明)。循環是不必要的,使用'cmb.List = Worksheets(「Sheet2」)。ListObjects(1).ListColumns(3).DataBodyRange.Value'來代替。如果確實使用AddItem,則應在加載數據之前使用cmb.Clear,以刪除組合中的任何現有數據。 –

0

您需要創建表列範圍,
要麼你可以將你排在側
的範圍內,或者您需要先添加行表和調整你的範圍
和傳遞範圍傳球給SetRng參數,
userFormName是用戶名的形式,
控件名稱是組合框名

Public Function FillRangeComboBox(userFormName As String, ControlName As String, SetRng As Range) As Boolean 
    Dim ObjFormName As Object: Set ObjFormName = ThisWorkbook.VBProject.VBComponents(userFormName) 
    Dim ObjControlName As MSForms.ComboBox: Set ObjControlName = ObjFormName.Designer.Controls(ControlName) 

    ''set combobox value 
    With ObjControlName 
     .RowSource = SetRng.Address 

    End With 

End Function  
相關問題