使用VBA,我試圖構建這個複雜的表單來向現有表添加新行。 我想要這個ComboBox將列出表格列中已存在的值。使用VBA,如何在excel表中基於特定的comlumn填充ComboBox值
我是VBA的新手。我嘗試了一些範圍/選擇和排序組合,目前並不缺乏...
使用VBA,我試圖構建這個複雜的表單來向現有表添加新行。 我想要這個ComboBox將列出表格列中已存在的值。使用VBA,如何在excel表中基於特定的comlumn填充ComboBox值
我是VBA的新手。我嘗試了一些範圍/選擇和排序組合,目前並不缺乏...
這是你要找的東西..它應該讓你開始,只需調整表和範圍以滿足您的需求。
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來填充更快。我真的不知道你可以這樣做。
您需要創建表列範圍,
要麼你可以將你排在側
的範圍內,或者您需要先添加行表和調整你的範圍
和傳遞範圍傳球給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
-1草率代碼,不編譯:正確的參考表中的數據是'工作表(「Sheet 2中」)ListObjects(1 ).ListColumns(3)。數據BodyRange'。假設組合框是表單上的* ActiveX *組合(可能是真的,但需要說明)。循環是不必要的,使用'cmb.List = Worksheets(「Sheet2」)。ListObjects(1).ListColumns(3).DataBodyRange.Value'來代替。如果確實使用AddItem,則應在加載數據之前使用cmb.Clear,以刪除組合中的任何現有數據。 –