[英]Problems with Vlookup, Arrays and Collections. in VBA
好吧,這與上下文有關。 我有一些代碼可以對零件的位置列表進行排序,以創建一個下拉列表位置,可以選擇這些位置,並將在以后的其他地方使用它們進行排序。 該位置是一個9位數的代碼,我試圖使用VLookup從另一張紙上找到其位置代碼的對應名稱,將它們組合成一個數組,然后在組合框中顯示該數組。
我目前在包含VLookup的行上收到“下標超出范圍”錯誤。
Locan2(i, 1) = Application.VLookup(Locan(i), Sheet16.Range("A2:D700"), 2, False)
我在上下文的整個子例程下添加了任何幫助,將不勝感激,這極大地困擾了我,而且我在搜索中找不到任何類似的東西。
Private Sub Compbox() '<============Populates Location Drop down list==============>
Dim lastrow As Long
Dim Locn As String
Dim Locan() As String
Dim Locan2() As String
Dim Location As Collection
lastrow = Sheet5.Cells(Sheet5.Rows.Count, "J").End(xlUp).Row 'Find length of Sheet5
Set Location = New Collection
For i = 4 To lastrow
Locn = Sheet5.Cells(i, 10).Value
On Error Resume Next
Location.Add (Locn), CStr(Locn) 'Add location values, ignore duplicates
On Error GoTo 0
Next i
i = 0
QuickSort Location, 1, Location.Count 'Sort into ascending order
CollectionToArray Location, Locan 'Turn into an array
ReDim Locan2(UBound(Locan), 2)
For i = 0 To UBound(Locan)
Locan2(i, 0) = Locan(i)
Locan2(i, 1) = Application.VLookup(Locan(i), Sheet16.Range("A2:D700"), 2, False)
Next i
'Find the corresponding location name and create a 2D array
With Me.ComboBox2
.ColumnCount = 2
.BoundColumn = 1 'display combo box
.ColumnWidths = "1 in; 3in"
.List = Locan
End With
End Sub
謝謝您的幫助!
之所以出錯,是因為您經過了Locan2的最后一個索引,我將在該行上放置一個斷點,然后查看i的值。 在不把整張紙放在我面前的情況下很難說更多。
在這些步驟中,邏輯上可能存在一些缺陷:
QuickSort Location, 1, Location.Count
CollectionToArray Location, Locan 'Turn into an array
ReDim Locan2(UBound(Locan), 2)
可能是一個錯誤的錯誤,或者可能沒有返回分配的arr?
我注意到您正在使用自定義VBA函數對集合進行排序並轉換為Array。
為什么不使用內置的ArrayList對象?
Dim Location As mscorlib.ArrayList
Dim Locan As Variant
Set Location = New mscorlib.ArrayList
For i = 4 To lastrow
Locn = Sheet5.Cells(i, 10).Value
On Error Resume Next
Location.Add CStr(Locn) 'ArrayList has the add function too!
On Error GoTo 0
Next i
Location.Sort 'Has the sort function built-in too!
Locan = Location.toArray 'And the toArray function is built-in too!!
如果您正在執行標准的快速排序和常規的toArray功能,則可能會對您有所幫助。
我留下了完整的Object聲明,因此您可以看到您需要添加對mscorlib.dll的引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.