2016-11-10 65 views
0

我已經在其他列表框之前使用完全相同的VBA代碼來非常成功地添加非重複項。不幸的是,這一次它給我一個錯誤「應用程序定義或對象定義的錯誤」。任何對此的見解都非常感謝,我不確定爲什麼它不會將項目添加到列表中。這也是一個ActiveX列表框,它被添加到工作表而不是用戶表單中。我這樣做過完全相同的代碼沒有問題,但是這一次它出現了錯誤:rngData.SortVBA。列表框的排序功能

Private Sub lstCountry_Click() 
Dim wsData As Worksheet 
Dim strID As String 
Dim rngData As Range 
Dim rngCell As Range 
Dim shtPivot 
Set shtPivot = ThisWorkbook.Worksheets("Pivot") 
Set wsData = ThisWorkbook.Worksheets("Raw Data") 
Set rngData = wsData.Range("a2").CurrentRegion 


lstCountry.Clear 
strID = "Select Country" 
rngData.Sort key1:=strID, Header:=xlYes 


For Each rngCell In rngData.Columns(1).Cells 
    If rngCell.Value <> strID Then 
     lstCountry.AddItem rngCell.Value 
     strID = rngCell.Value 
    End If 
Next rngCell 

附上的表格的屏幕截圖,我試圖理清 enter image description here

+0

這段代碼會在每個'lstCountry.AddItem'語句中調用它自己。此外,我不明白'strID = rngCell.Value'到'For Each rngCell'循環中:你真正的目標是什麼? – user3598756

+0

我的目標是將我剛剛附加到列表框中的屏幕截圖中的值添加到一個不重複的地方。我在成功之前完成了這個任務,只是這次我收到一個錯誤,我不知道爲什麼! – Rosario

+0

哪個工作表是你想要處理的ActiveX列表框?你如何在第一次填充它? – user3598756

回答

0

這裏是一個很好的例子,如何使用排序選項: https://msdn.microsoft.com/en-us/library/office/ff840646.aspx

在你的情況,很可能你沒有「選擇國家」寫在你的範圍的頂部。您的頂級範圍是第2行。您可以提供截圖嗎?

+0

我剛剛附上截圖。謝謝你 – Rosario

+0

你可以改變strID到下面的'strID = wsData.Range(「a2」)' – Vityata

+0

如果我這樣做了, – Rosario

0

我只是想通了。我重新複製了表格,我將信息從另一張表中拉出,並且我的代碼正常工作。這很奇怪,它不能在另一張工作表上完全相同的表格上工作。我不明白,但我會用我剛剛複製的表格代替。我讚賞這個幫助。:-)