ComboBox, отфильтровывающий выбранный элемент в другом комбоБоксе - Ошибка разрешения - PullRequest
0 голосов
/ 14 января 2020

У меня есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...