Уважаемые форумчане, добрый день! Решил с помощью макроса поставить фильтр за период. Формат столбца (текстовый или числовой или общий). Сначала выполнил запись декодера и все получилось (Макрос1). Но когда начал писать программно (Макрос2, Макрос4) ничего не получается. Что пошло не так не понимаю. Сначала пробовал подставить диапазон выбранных значений, затем записать в виде массива.
Уважаемые форумчане, добрый день! Решил с помощью макроса поставить фильтр за период. Формат столбца (текстовый или числовой или общий). Сначала выполнил запись декодера и все получилось (Макрос1). Но когда начал писать программно (Макрос2, Макрос4) ничего не получается. Что пошло не так не понимаю. Сначала пробовал подставить диапазон выбранных значений, затем записать в виде массива.A_3485
Если Вы собираетесь фильтровать по дате, то и формат должен быть не текст!!! Ваш второй макрос, будет выглядеть так [vba]
Код
Sub Макрос2() Dim result() ReDim result(1 To Day(Date)) For i = 1 To Day(Date) result(i) = DateSerial(Year(Date), Month(Date), i) Next i ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:= _ result, Operator:=xlFilterValues End Sub
[/vba] а третий вот так (см. ниже вариант от Boroda) [vba]
Код
Sub Макрос4() начало = CDate("01.08.2017") конец = Date ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:=">=" _ & начало, Operator:=xlAnd, Criteria2:="<=" & конец End Sub
Если Вы собираетесь фильтровать по дате, то и формат должен быть не текст!!! Ваш второй макрос, будет выглядеть так [vba]
Код
Sub Макрос2() Dim result() ReDim result(1 To Day(Date)) For i = 1 To Day(Date) result(i) = DateSerial(Year(Date), Month(Date), i) Next i ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:= _ result, Operator:=xlFilterValues End Sub
[/vba] а третий вот так (см. ниже вариант от Boroda) [vba]
Код
Sub Макрос4() начало = CDate("01.08.2017") конец = Date ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:=">=" _ & начало, Operator:=xlAnd, Criteria2:="<=" & конец End Sub
sboy, у Вас это работает? Например, последний макрос? У меня такой вариант [vba]
Код
Sub Макрос4() начало = Format(CDate("01.08.2017"), "#") конец = Format(Date, "#") ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:=">=" _ & начало, Operator:=xlAnd, Criteria2:="<=" & конец End Sub
[/vba]
sboy, у Вас это работает? Например, последний макрос? У меня такой вариант [vba]
Код
Sub Макрос4() начало = Format(CDate("01.08.2017"), "#") конец = Format(Date, "#") ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:=">=" _ & начало, Operator:=xlAnd, Criteria2:="<=" & конец End Sub
Если вместо "." ставлю "/" код проходит. Получается, что дело в региональной настройке, которая определяет формат даты. Как его обходить программно, например если у меня в компе региональная настройка и символ "/", а у второго работника ".".
Если вместо "." ставлю "/" код проходит. Получается, что дело в региональной настройке, которая определяет формат даты. Как его обходить программно, например если у меня в компе региональная настройка и символ "/", а у второго работника ".".A_3485
так тоже не работает. Получилось при условии: формат ячеек ДАТА, преобразованная переменная "начало" через "#". Остается вопрос с региональными настройками. Может ввести промежуточную переменную, которая будет проверять какой символ региональной настройки выбран "." или "/". Затем в зависимости от выбранного символа подставлять его в: [vba]
Код
начало = Format(CDate("01.08.2017"), "#")
[/vba]
так тоже не работает. Получилось при условии: формат ячеек ДАТА, преобразованная переменная "начало" через "#". Остается вопрос с региональными настройками. Может ввести промежуточную переменную, которая будет проверять какой символ региональной настройки выбран "." или "/". Затем в зависимости от выбранного символа подставлять его в: [vba]
А у меня работает Покажите в файле как у Вас "не работает" И не морочьтесь с региональными настройками. Для фильтра они неважны - там всегда формат MM/DD/YYYY
А у меня работает Покажите в файле как у Вас "не работает" И не морочьтесь с региональными настройками. Для фильтра они неважны - там всегда формат MM/DD/YYYY_Boroda_
Sub tttt() Dim dt1$, dt2$ ' выбираем даты с 01.08.2017 по 01.09.2017 dt1 = ">=" & CLng(#8/1/2017#): dt2 = "<=" & CLng(#9/1/2017#) With [a3].CurrentRegion .AutoFilter Field:=3, Criteria1:=dt1, Operator:=xlAnd, Criteria2:=dt2 End With End Sub
[/vba]
может как-то так: [vba]
Код
Sub tttt() Dim dt1$, dt2$ ' выбираем даты с 01.08.2017 по 01.09.2017 dt1 = ">=" & CLng(#8/1/2017#): dt2 = "<=" & CLng(#9/1/2017#) With [a3].CurrentRegion .AutoFilter Field:=3, Criteria1:=dt1, Operator:=xlAnd, Criteria2:=dt2 End With End Sub
С конкретными датами вопросов нет, а вот с произвольными... Вот так заработало для 2007 Excel [vba]
Код
Sub Макрос2() Dim result() ReDim result(1 To Day(Date) * 2) For i = 1 To Day(Date) result(i * 2 - 1) = 2 result(i * 2) = Format(DateSerial(Year(Date), Month(Date), i), "M\/D\/YYYY") Next i ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:= _ result, Operator:=xlFilterValues End Sub
[/vba]
С конкретными датами вопросов нет, а вот с произвольными... Вот так заработало для 2007 Excel [vba]
Код
Sub Макрос2() Dim result() ReDim result(1 To Day(Date) * 2) For i = 1 To Day(Date) result(i * 2 - 1) = 2 result(i * 2) = Format(DateSerial(Year(Date), Month(Date), i), "M\/D\/YYYY") Next i ActiveSheet.Range("$A$3:$M$60000").AutoFilter Field:=3, Criteria1:= _ result, Operator:=xlFilterValues End Sub