Всем привет! Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще. Прошу вас, гуру: подскажите, куда копать? [vba]
Код
Private Sub CheckBox1_Click() If CheckBox1.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020") ElseIf CheckBox1.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020") ElseIf CheckBox1.Value = True And CheckBox2.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020") ElseIf CheckBox2.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "2/28/2020", 1, "3/31/2020") ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020", 1, "3/31/2020") Else: ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 End If End Sub
[/vba]
Всем привет! Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще. Прошу вас, гуру: подскажите, куда копать? [vba]
Код
Private Sub CheckBox1_Click() If CheckBox1.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020") ElseIf CheckBox1.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020") ElseIf CheckBox1.Value = True And CheckBox2.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020") ElseIf CheckBox2.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "2/28/2020", 1, "3/31/2020") ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020", 1, "3/31/2020") Else: ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 End If End Sub
Здравствуйте. При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок.
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Здравствуйте. При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок.
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.Pelena
Sub Filter_Array() Dim a1 As Variant ' нужно будет найти значения дней для месяцев ' массив нужно будет заполнять циклом a1 = Array(1, "2/28/2020", 1, "3/31/2020") ActiveSheet.ShowAllData ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=a1 End Sub
Sub Filter_Array() Dim a1 As Variant ' нужно будет найти значения дней для месяцев ' массив нужно будет заполнять циклом a1 = Array(1, "2/28/2020", 1, "3/31/2020") ActiveSheet.ShowAllData ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=a1 End Sub
Собрал конструкцию, может и не правильно но работает.[vba]
Код
Sub FiltrPoChekBoksu() Dim arr() As Variant, j As Long n = 0 f = 1 For i = 0 To 11 If ActiveSheet.OLEObjects("CheckBox" & i + 1).Object.Value = True Then j = Application.EoMonth("1/01/2020", i) ReDim Preserve arr(f) arr(n) = 1 arr(n + 1) = Application.Text(j, "MM/DD/YYYY") f = f + 2 n = n + 2 End If Next If n = 0 Then ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1: Exit Sub ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(arr()) End Sub
[/vba]Учусь работать с массивами, но что то туго идёт.
Собрал конструкцию, может и не правильно но работает.[vba]
Код
Sub FiltrPoChekBoksu() Dim arr() As Variant, j As Long n = 0 f = 1 For i = 0 To 11 If ActiveSheet.OLEObjects("CheckBox" & i + 1).Object.Value = True Then j = Application.EoMonth("1/01/2020", i) ReDim Preserve arr(f) arr(n) = 1 arr(n + 1) = Application.Text(j, "MM/DD/YYYY") f = f + 2 n = n + 2 End If Next If n = 0 Then ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1: Exit Sub ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria2:=Array(arr()) End Sub
[/vba]Учусь работать с массивами, но что то туго идёт.gling
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?Xpert
Сообщение отредактировал Xpert - Пятница, 29.05.2020, 09:33