Некоторые части этого кода выглядят как царапина на левом ухе, когда правая рука проходит над головой. Но я не совсем понимаю, как это выглядит на самом деле (пример будет полезен) - есть ли у каждого поставщика какой-то отдельный столбец индикации? Если так, что вы там фильтруете? Похоже, тег производителя?
Это, например, решение для одного столбца поставщика (D), который может содержать 3 имени. В основном применяется автофильтр списка значений. (Я использую флажки activex ниже, так как их свойства доступны напрямую.)
Private Sub VC1500_Click()
Update_Filter
End Sub
Private Sub VC7500_Click()
Update_Filter
End Sub
Private Sub VC144024_Click()
Update_Filter
End Sub
Private Sub Update_Filter()
Dim varr_filter(3) As String
Dim indshow As Boolean
indshow = True
If VC1500 Then
varr_filter(0) = VC1500.Caption
indshow = False
End If
If VC7500 Then
varr_filter(1) = VC7500.Caption
indshow = False
End If
If VC144024 Then
varr_filter(2) = VC144024.Caption
indshow = False
End If
If indshow Then
Range("$A:$D").AutoFilter
Else
Range("$A:$D").AutoFilter field:=4, Criteria1:=varr_filter, Operator:=xlFilterValues
End If
End Sub
Примечание. Выберите правильный столбец для фильтрации в качестве значения «поля», и если по какой-то причине вы хотите отделить флажки от формы, добавьте «» «листы (« имя листа »). {Каждый флажок}» "".
В качестве альтернативы, если каждый из vcs обладает отдельным столбцом и ищет строки, в которых буквально написано "vendor", я бы слил их в лист следующим образом:
E2=if(cond1)*checkbox1 + if(cond2)*checkbox2 + if(cond3)*checkbox3 ; E > 0.
Cond1 could be b2="Vendor", for example.
To make the sheet display all cols when no ticks are selected,
I've added another value: 1 - max(checkboxes).
E6=1-MAX($H$4:$H$6) + IF(AND(B2="Vendor"),1,0)*$H$4 +
IF(AND(C2="Vendor"),1,0)*$H$5 + IF(AND(D2="Vendor"),1,0)*$H$6
Это один пример, где помогает скрытое значение листа, поскольку вы можете определить такой столбец без vb. И потом, сам код немного упрощается.
Private Sub VC1500_Click()
If VC1500.Value Then
Range("$H$4").Value = 1
Else
Range("$H$4").Value = 0
End If
Update_Filter
End Sub
Private Sub VC7500_Click()
If VC7500.Value Then
Range("$H$5").Value = 1
Else
Range("$H$5").Value = 0
End If
Update_Filter
End Sub
Private Sub VC144024_Click()
If VC144024.Value Then
Range("$H$6").Value = 1
Else
Range("$H$6").Value = 0
End If
Update_Filter
End Sub
Private Sub Update_Filter()
Range("$A:$E").AutoFilter field:=5, Criteria1:=">0", Operator:=xlFilterValues
End Sub
Также проще перейти к элементу управления формы, проверяя значение диапазона во время щелчка вместо флажка и скрывая столбец H. Не полностью пуленепробиваемый, но достаточный для обычного пользователя. Либо так, либо читайте форму, как вы написали.
Редактировать: Добавленный выше проверенный код для обоих случаев (одинарный столбец, многоцветный), включая отображение всех строк, когда галочки не отмечены, а не нет. Вот демонстрационные снимки.
Один код col
Один образец листа цв.
Одиночный отфильтрованный цвет
Многоцветный код
Multicol образец
Многоцветный фильтр