簡體   English   中英

Vlookup,數組和集合的問題。 在VBA中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM