У меня есть 2 списка элементов управления ActiveX внутри листа «Настройки». Оба имеют один и тот же список. Моя цель - если я выбрал элемент в ComboBox1, этот выбранный элемент отфильтровывается в ComboBox2 и наоборот. Я нашел этот код, написанный Tin Bum , однако он использовал пользовательскую форму. Код хорошо работает при первых двух выборках, например, если я выберу «1» в ComboBox1, он будет отфильтрован в ComboBox2. Но когда я снова изменю ComboBox1, код выдаст ошибку «Отказано в доступе» в следующих строках:
Worksheets("Settings").ComboBox1.List = Split(Left2Use, ",")
Worksheets("Settings").ComboBox2.List = Split(Left2Use, ",")
Это полный код, который у меня есть:
код внутри объекта ThisWorkbook
Private Sub Workbook_Open()
Worksheets("Settings").ComboBox1.Value = Null
Worksheets("Settings").ComboBox2.Value = Null
Worksheets("Settings").ComboBox1.List = Split(" ,1,2,3,4,5", ",")
Worksheets("Settings").ComboBox2.List = Split(" ,1,2,3,4,5", ",")
End Sub
Код внутри объекта листа «Настройки»
Sub ComboBox1_Change()
ManageDropDowns (1)
End Sub
Sub ComboBox2_Change()
ManageDropDowns (2)
End Sub
Sub ManageDropDowns(IDNum As Integer)
Dim UsedList As String, FullList As String, Left2Use As String
Dim FullArray As Variant, UsedArray(1 To 2) As String
Dim i As Integer
UL1 = ""
UL1 = UL1 & IIf(Trim(ComboBox2.Value) = "", "", "" & Trim(ComboBox2.Value) & ",")
While Right(UL1, 1) = ","
UL1 = Left(UL1, Len(UL1) - 1)
Wend
UL2 = ""
UL2 = UL2 & IIf(Trim(ComboBox1.Value) = "", "", "" & Trim(ComboBox1.Value) & ",")
FullList = "1,2,3,4,5"
FullArray = Split(FullList, ",")
Left2Use = " ,"
If IDNum <> 1 Then
UsedList = UL1
Left2Use = " " ' Space
For i = 0 To UBound(FullArray)
iTxt = Trim("" & i + 1)
If Not (InStr(1, UsedList, iTxt) > 0) Then
' Not Already Used - Add it to Left2Use
Left2Use = Left2Use & "," & iTxt
End If
Next i
Worksheets("Settings").ComboBox1.List = Split(Left2Use, ",")
End If
If IDNum <> 2 Then
UsedList = UL2
Left2Use = " " ' Space
For i = 0 To UBound(FullArray)
iTxt = Trim("" & i + 1)
If Not (InStr(1, UsedList, iTxt) > 0) Then
' Not Already Used - Add it to Left2Use
Left2Use = Left2Use & "," & iTxt
End If
Next i
Worksheets("Settings").ComboBox2.List = Split(Left2Use, ",")
End If
End Sub