雖然我對編程很熟悉,但我並不熟悉VB或VBA。如何在VBA中創建列表(而不是字典)?
我正在使用Excel 2016,並試圖根據另一個工作表中的一列單元格填充組合框(位於用戶窗體上)。我需要刪除空單元格,重複項,一些已知的值,然後對結果進行排序。
我有一些代碼主要工作(我有一切,但排序),但我沒有保存它覆蓋之前。它基於this answer。我無法弄清楚如何添加排序。它使用了一個字典,並花了5秒鐘彈出一個用戶窗體並填充組合框。列表中只有1000個單元格,所以在我看來,這個項目的字典對於數據結構來說太複雜了。
我試圖從here得到代碼的工作,但我不知道它在做什麼,因爲變量名稱是如此模糊,我不熟悉VB。
在這一點上,我想我只需要做我自己的搜索,替換和排序,而不是依賴於副本。我似乎無法找到VBA是否有List()對象。每個人都在談論數組和字典。我想使用一個提供排序功能的數據結構(如果存在的話)。
什麼數據結構應該用於這樣的事情?
我已經重建了大部分工作的代碼。這是用戶窗體初始化,如果這不明顯。
Private Sub UserForm_Initialize()
'*Start with empty inputs
InitialsTextBox.Value = ""
MakeComboBox.Clear
ModelComboBox.Clear
'*Fill the Combo Boxes
Dim oDictionary As Object
Dim strCellContent As String
Dim rngComboValues As Range
Dim rngCell As Range
Set rngComboValues = Sheets("BOM").Range("B:B")
Set oDictionary = CreateObject("Scripting.Dictionary")
For Each rngCell In rngComboValues
strCellContent = rngCell.Value
If Not oDictionary.exists(strCellContent) Then
oDictionary.Add strCellContent, 0
End If
Next rngCell
For Each itm In oDictionary.keys
Me.MakeComboBox.AddItem itm
Next itm
Set oDictionary = Nothing
End Sub
編輯/更新
下面的答案是一個很好的,但需要額外的庫安裝在運行VBA代碼的計算機上。雖然這可能適用於大多數情況(.NET很常見),但對於此項目,我寧願不要依賴和/或不使用VBA語言。這將運行的環境可能不喜歡這樣的事情。
這是否讓你走在正確的方向:http://stackoverflow.com/questions/3587662/how-do-i-sort-a-collection – sous2817
是一個字典集合?也許換一種方式呢?或者他們不相關? – YetAnotherRandomUser
字典是一種集合 – sous2817