Доброго дня всем!
Помогите разобраться с фильтрами на листе. Есть необходимость запоминать их состояние, чтобы после обновления данных в таблице восстановить фильтрацию обратно. То есть данные периодически меняются, и нужно сделать так, чтобы юзверь не фильтровал данные заново, после обновления.
Была мысль собрать по всем столбцам, где Filter.On=True значения Operator, Criteria1 и Criteria2, но тут поджидала засада! Дело в том, что эти свойства не факт, что существуют. То есть Criteria1 или Criteria2 могут просто отсутствовать и при попытке сохранить их значение возникает ошибка. Какой глубокий смысл было делать эти свойства динамически появляющимися я не знаю, но глюк получился знатный.
Проблема ещё в том, что я не могу понять, по какому принципу Ёксель решает, какой из Criteria он создаст, первый или второй или оба сразу.
Вот что получилось из под макрокодера на разных столбцах одного листа:
Помогите разобраться с фильтрами на листе. Есть необходимость запоминать их состояние, чтобы после обновления данных в таблице восстановить фильтрацию обратно. То есть данные периодически меняются, и нужно сделать так, чтобы юзверь не фильтровал данные заново, после обновления.
Была мысль собрать по всем столбцам, где Filter.On=True значения Operator, Criteria1 и Criteria2, но тут поджидала засада! Дело в том, что эти свойства не факт, что существуют. То есть Criteria1 или Criteria2 могут просто отсутствовать и при попытке сохранить их значение возникает ошибка. Какой глубокий смысл было делать эти свойства динамически появляющимися я не знаю, но глюк получился знатный.
Проблема ещё в том, что я не могу понять, по какому принципу Ёксель решает, какой из Criteria он создаст, первый или второй или оба сразу.
Вот что получилось из под макрокодера на разных столбцах одного листа:
Код |
---|
Sub Mac1() ActiveSheet.Range("$A$5:$R$1210").AutoFilter Field:=18, Criteria1:=Array( _ "IP 01.06.2023", "IP 07.06.2023", "IP 13.06.2023", "="), Operator:= _ xlFilterValues End Sub Sub Mac2() ActiveSheet.Range("$A$5:$R$1210").AutoFilter Field:=4, Criteria1:=Array( _ "Slovo1", "Slovo2", "="), Operator:=xlFilterValues End Sub Sub Mac3() ActiveSheet.Range("$A$5:$R$1210").AutoFilter Field:=11, Operator:= _ xlFilterValues, Criteria2:=Array(2, "1/9/2023") End Sub Sub Mac4() ActiveSheet.Range("$A$5:$R$1210").AutoFilter Field:=11, Operator:= _ xlFilterValues, Criteria2:=Array(2, "1/9/2023", 2, "6/14/2022", 1, "2/6/2020") End Sub Sub Mac5() ActiveSheet.Range("$A$5:$R$1210").AutoFilter Field:=11, Operator:= _ xlFilterValues, Criteria2:=Array(0, "12/30/2021", 0, "11/29/2018") End Sub Sub Mac6() ActiveSheet.Range("$A$1:$A$31").AutoFilter Field:=1, Criteria1:=Array("=") _ , Operator:=xlFilterValues, Criteria2:=Array(2, "5/2/2023", 2, "5/4/2023", 2, _ "5/30/2023") End Sub |
Как видно, с одинаковым оператором в одном случае используется только Criteria1, в другом только Criteria2 а в третьем и то и другое.
И как это понять? (и простить...)
Можно просто сохранять тот параметр, который существует, не разбираясь почему именно он, но как определить, существует ли этот самый Criteria1 или Criteria2. Это главный вопрос.