2017-09-01 76 views
0

我有Unspecified Error我得到試圖刪除我的組合框重複項目的我有掙扎的項目...VBA - 拆下組合框

我第一次添加使用RowSource物業項目。 然後我想使用RemoveItem屬性刪除重複的值。

我得到的錯誤是在這一行產生的:CompteCOMBO.RemoveItem(J)

 With CompteCOMBO 
      .Visible = True 
      .RowSource = "Missions!ComptesExistant" 
     End With 

      For i = 0 To CompteCOMBO.ListCount - 1 
       Valeur = CompteCOMBO.List(i) 
       For j = i + 1 To CompteCOMBO.ListCount - 1 
        If Valeur = CompteCOMBO.List(j) Then 
         CompteCOMBO.RemoveItem (j) 'ERROR HERE 
        End If 
       Next j 
      Next i 

感謝您提前幫助。

有一個好的一天,

回答

3

這裏有幾個可疑物品:

  1. 通過迭代和刪除在同一時間通常需要很多照顧。由於您正在嘗試使用已刪除的內容,因此您可能會很容易發生錯誤。

  2. 請注意此行For j = i + 1 To CompteCOMBO.ListCount - 1。它最終將評估爲For j = 5 to 4

  3. 它不應該在這種情況下會造成問題,但不要在這裏使用括號:他們是在組合框中後反而CompteCOMBO.RemoveItem (j)

去掉重複的,我會過濾掉首先複製。使用一個Dictionary,它有一個方便的Exists函數。要使用它,您需要添加對Microsoft腳本運行時間的引用。在工具>參考中找到它。像這樣的東西會工作:

模塊1

Sub ShowUserform() 
    With New UserForm1 
     .Show vbModal 
    End With 
End Sub 

UserForm1

Private Sub UserForm_Initialize() 
    Dim arr As Variant, v As Variant 
    Dim d As Scripting.Dictionary 

    Set d = New Scripting.Dictionary 
    arr = Array("a", "b", "a") 'or similarly: 
    'arr = Application.Transpose(ThisWorkbook.Worksheets("Missions").Range("CompetesExistant")) 

    For Each v In arr 
     If Not d.Exists(v) Then d.Add v, v 
    Next v 

    Me.ComboBox1.List = d.Keys 
End Sub 
+0

你好,感謝你的回答。我對這個腳本編寫的詞典不太瞭解。這是一個公司項目,我知道如何使用代碼添加庫,但對於我面臨的問題(IMO)而言,這有點複雜。我只是不明白爲什麼我不能刪除我的組合框中的項目? –

+0

Hi @ Jean-FIC。我會鼓勵你對字典感到滿意。它們被廣泛使用,並且在嘗試創建唯一列表時非常有用(如上所示)。這不像是你正在導入任何新東西,它只是Excel的標準庫之一... – CallumDA

+0

@ Jean-FIC,我已經添加了一些要注意的事情。但我不打算專門測試代碼。如上所述,我強烈建議從另一個角度來攻擊它。 – CallumDA