Диапазон не работает с таблицей Excel с использованием автофильтра по критериям флажка - PullRequest
0 голосов
/ 07 января 2019

То, что я пытаюсь сделать, это использовать форму множественных флажков, чтобы установить значения фильтра на основе таблицы в моей рабочей таблице «Проекты». Я был в состоянии успешно заставить это работать на людях, однако, что мне нужно, чтобы это сделать, это взять любую комбинацию из 33 флажков, чтобы отфильтровать строки, которые соответствуют всем выбранным критериям. Ниже приведено то, что у меня есть в данный момент, и оно продолжает наносить удары по дальности. Мой диапазон содержит столбцы K: AQ, которые равны значениям от 11 до 43, как вы увидите ниже. Я ценю любую помощь, которую вы можете оказать.

Private Sub FilterButton_Click()

Dim wb As Workbook: Set wb = ThisWorkbook 
Dim ws As Worksheet
Set ws = wb.Sheets("Projects")
Dim fld As Long
For fld = 11 To 43
Next

If frmSearch.CheckBox1 = True = True Or _
frmSearch.CheckBox2 = True Or frmSearch.CheckBox3 = True Or _
frmSearch.CheckBox4 = True Or frmSearch.CheckBox5 = True Or _
frmSearch.CheckBox6 = True Or frmSearch.CheckBox7 = True Or _
frmSearch.CheckBox8 = True Or frmSearch.CheckBox9 = True Or _
frmSearch.CheckBox10 = True Or frmSearch.CheckBox11 = True Or _
frmSearch.CheckBox12 = True Or frmSearch.CheckBox13 = True Or _
frmSearch.CheckBox14 = True Or frmSearch.CheckBox15 = True Or _
frmSearch.CheckBox16 = True Or frmSearch.CheckBox17 = True Or _
frmSearch.CheckBox18 = True Or frmSearch.CheckBox19 = True Or _
frmSearch.CheckBox20 = True Or frmSearch.CheckBox21 = True Or _
frmSearch.CheckBox22 = True Or frmSearch.CheckBox23 = True Or _
frmSearch.CheckBox24 = True Or frmSearch.CheckBox25 = True Or _
frmSearch.CheckBox26 = True Or frmSearch.CheckBox27 = True Or _
frmSearch.CheckBox28 = True Or frmSearch.CheckBox29 = True Or _
frmSearch.CheckBox30 = True Or frmSearch.CheckBox31 = True Or _
frmSearch.CheckBox32 = True Or frmSearch.CheckBox33 = True Then

ws.Range("K2:AQ1500").AutoFilter Field:="fld", Criteria1:="<>"

End If
End Sub

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Так что я не знаю, как выглядит ваша пользовательская форма, но если вы можете, я бы посоветовал переместить эти флажки в фрейм, чтобы вы могли просматривать их намного проще ... например:

Private Sub FilterButton_Click()
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet
    Set ws = wb.Sheets("Projects")

    Dim i As Integer

    ' For each child control in the frame
    For i = 0 To Frame1.Controls.Count - 1

        ' If the child control is a check box
        If TypeOf Frame1.Controls.Item(i) Is CheckBox Then

            ' If the CheckBox is checked
            If Frame1.Controls.Item(i).Value Then

                 'Your code here...
                 Debug.Print (i & " " & Frame1.Controls.Item(i).Name)
            End If
        End If
    Next i
End Sub

Что касается применения фильтра, похоже, что каждый флажок должен быть связан со столбцом в вашем диапазоне ... (имеется в виду Checkbox1 ==> 'K'?). Я бы сделал это следующим образом: (заменяя 'ваш код') здесь "сверху"

' Add a filter to the column at the index of 'i' (+1 so we aren't using base 0)
ws.Range("K2:AQ1500").AutoFilter Field:=i + 1, Criteria1:="<>"

Пожалуйста, если вы не понимаете код, спросите! Я более чем счастлив объяснить что-либо. Помните, что копирование / вставка не учит! : D

0 голосов
/ 07 января 2019

Не содержит ли ваш код слишком много "True" на If frmSearch.CheckBox1 = True = True часть?

Попробуйте ниже.

Private Sub FilterButton_Click()

Dim wb As Workbook: Set wb = ThisWorkbook 
Dim ws As Worksheet
Set ws = wb.Sheets("Projects")
Dim fld As Long
For fld = 11 To 43
Next

If frmSearch.CheckBox1 = True Or _
frmSearch.CheckBox2 = True Or frmSearch.CheckBox3 = True Or _
frmSearch.CheckBox4 = True Or frmSearch.CheckBox5 = True Or _
frmSearch.CheckBox6 = True Or frmSearch.CheckBox7 = True Or _
frmSearch.CheckBox8 = True Or frmSearch.CheckBox9 = True Or _
frmSearch.CheckBox10 = True Or frmSearch.CheckBox11 = True Or _
frmSearch.CheckBox12 = True Or frmSearch.CheckBox13 = True Or _
frmSearch.CheckBox14 = True Or frmSearch.CheckBox15 = True Or _
frmSearch.CheckBox16 = True Or frmSearch.CheckBox17 = True Or _
frmSearch.CheckBox18 = True Or frmSearch.CheckBox19 = True Or _
frmSearch.CheckBox20 = True Or frmSearch.CheckBox21 = True Or _
frmSearch.CheckBox22 = True Or frmSearch.CheckBox23 = True Or _
frmSearch.CheckBox24 = True Or frmSearch.CheckBox25 = True Or _
frmSearch.CheckBox26 = True Or frmSearch.CheckBox27 = True Or _
frmSearch.CheckBox28 = True Or frmSearch.CheckBox29 = True Or _
frmSearch.CheckBox30 = True Or frmSearch.CheckBox31 = True Or _
frmSearch.CheckBox32 = True Or frmSearch.CheckBox33 = True Then

ws.Range("K2:AQ1500").AutoFilter Field:="fld", Criteria1:="<>"

End If
End Sub
...