Я пытаюсь создать подпрограмму для удаления дубликатов из comboboxes. Я вводил число вместо X, когда вызывал подпрограмму. Я получаю сообщение об ошибке «Object Required», когда я получаю подпрограмму. Я знаю, это означает, что что-то не было правильно инициализировано, но я не могу понять, как исправить мою проблему. Любая помощь будет принята с благодарностью. Спасибо.Excel - VBA Удаление дубликатов из Comboboxes
Private Sub UserForm_Initialize()
'ComboBox Populate
Dim rngNext As Range
Dim myRange As Range
Dim C As Integer
With Sheets("KEY")
Set rngNext = .Range("B500").End(xlUp).Offset(1, 0)
End With
rngNext.Select
Set myRange = Range("B2", rngNext)
With ComboBox1
For Each rngNext In myRange
If rngNext <> "" Then .AddItem rngNext
Next rngNext
End With
Call RemoveDuplicates(1)
End sub
Private Sub RemoveDuplicates(X)
'Remove Duplicates
Dim i As Long
Dim j As Long
With "ComboBox" & X
For i = 0 To .ListCount + 1 'Getting object required error in this line
For j = .ListCount To (i + 1) Step -1
If .List(j) = .List(i) Then
.RemoveItem j
End If
Next
Next
End With
End Sub
Финальный код
Все работает отлично подходит для удаления дубликатов.
Public allCBoxes As Collection
Private Sub UserForm_Initialize()
Set allCBoxes = New Collection
allCBoxes.Add ComboBox1
'ComboBox Populate
Dim rngNext As Range
Dim myRange As Range
Dim C As Integer
With Sheets("KEY")
Set rngNext = .Range("B500").End(xlUp).Offset(1, 0)
End With
rngNext.Select
Set myRange = Range("B2", rngNext)
With ComboBox1
For Each rngNext In myRange
If rngNext <> "" Then .AddItem rngNext
Next rngNext
End With
Call RemoveDuplicates(1)
End sub
Private Sub RemoveDuplicates(X)
'Remove Duplicates
Dim i As Long
Dim j As Long
With allCBoxes(X)
For i = 0 To .ListCount + 1
For j = .ListCount -1 To (i + 1) Step -1
If .List(j) = .List(i) Then
.RemoveItem j
End If
Next
Next
End With
End Sub
Ваш метод также решил проблему с объектом, но теперь я получаю эту ошибку: «Не удалось получить свойство List. Недопустимый индекс массива свойств». – Tyler
@Tyler На какой строке? –
Насколько я могу судить по строке .RemoveItem j во вложенном операторе if. – Tyler