Знаю что вопрос задавался неоднократно но поверхностное изучение гугла результата не дало, а задачу нужно решить срочно. Итак задача отфильтровать данные вида "26.11.2013 15:30:01" при ручной установке автофильтра все работает но при попытке установить фильтр макросом получаю пустые данные! если потом зайти в фильтры и нажать Ok то все работает. Пример прилагаю.
Знаю что вопрос задавался неоднократно но поверхностное изучение гугла результата не дало, а задачу нужно решить срочно. Итак задача отфильтровать данные вида "26.11.2013 15:30:01" при ручной установке автофильтра все работает но при попытке установить фильтр макросом получаю пустые данные! если потом зайти в фильтры и нажать Ok то все работает. Пример прилагаю.
Необходимо выбрать значения в определенном промежутке времени к примеру Начиная с 26.11.2013 15:35 и заканчивая 26.11.2013 15:45 Уже по приходу с работы домой наткнулся на тему на одном из форумов Автофильтр врёт использовав ее получилось отфильтровать, файл в атаче. Но насколько я понимаю, в данном примере заложена идея ухода от привязки к региональным настройкам, то есть чтобы было не важно какой разделитель целой и дробной части выставлен иначе не вижу смысла танцев с Application.DecimalSeparator. С этим я пока так и не смог разобраться
[vba]
Код
Sub Как_я_пытался() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ ">=26.11.2013 15:35", Operator:=xlAnd, Criteria2:="<=26.11.2013 15:45" End Sub
Sub Как_получилось() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, _ Criteria1:=(">=" & CDbl(CDate("26.11.2013 15:35"))), Operator:=xlAnd, _ Criteria2:=("<=" & CDbl(CDate("26.11.2013 15:45"))) End Sub
Sub Как_несовсем_получилось() 'Тут насколько я понял задумку автора не должен иметь значения разделитель "," или "." 'но у меня тем немения код при разделителе "," не работает LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, _ Criteria1:=(">=" & CDbl(CDate("26.11.2013 15:35"))), Operator:=xlAnd, _ Criteria2:=("<=" & CDbl(CDate("26.11.2013 15:45"))) End Sub
[/vba]
Необходимо выбрать значения в определенном промежутке времени к примеру Начиная с 26.11.2013 15:35 и заканчивая 26.11.2013 15:45 Уже по приходу с работы домой наткнулся на тему на одном из форумов Автофильтр врёт использовав ее получилось отфильтровать, файл в атаче. Но насколько я понимаю, в данном примере заложена идея ухода от привязки к региональным настройкам, то есть чтобы было не важно какой разделитель целой и дробной части выставлен иначе не вижу смысла танцев с Application.DecimalSeparator. С этим я пока так и не смог разобраться
[vba]
Код
Sub Как_я_пытался() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ ">=26.11.2013 15:35", Operator:=xlAnd, Criteria2:="<=26.11.2013 15:45" End Sub
Sub Как_получилось() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, _ Criteria1:=(">=" & CDbl(CDate("26.11.2013 15:35"))), Operator:=xlAnd, _ Criteria2:=("<=" & CDbl(CDate("26.11.2013 15:45"))) End Sub
Sub Как_несовсем_получилось() 'Тут насколько я понял задумку автора не должен иметь значения разделитель "," или "." 'но у меня тем немения код при разделителе "," не работает LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, _ Criteria1:=(">=" & CDbl(CDate("26.11.2013 15:35"))), Operator:=xlAnd, _ Criteria2:=("<=" & CDbl(CDate("26.11.2013 15:45"))) End Sub
KuklP Огромное спасибо ваш вариант отрабатывает при любом разделителе, именно то что нужно!
[vba]
Код
Sub test() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ ">=" & Replace(CDbl(CDate("26.11.2013 15:35")), ",", "."), _ Operator:=xlAnd, Criteria2:="<=" & _ Replace(CDbl(CDate("26.11.2013 15:45")), ",", ".") End Sub
[/vba]
на самом деле я пытался сразу использовать CDbl(CDate.... но очевидно не учел региональные стандарты и ничего недобившись обратился к вам. Еще раз огромное спасибо
PS: Да на планете смотрел я просто ответы писать не успеваю
KuklP Огромное спасибо ваш вариант отрабатывает при любом разделителе, именно то что нужно!
[vba]
Код
Sub test() LastRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ ">=" & Replace(CDbl(CDate("26.11.2013 15:35")), ",", "."), _ Operator:=xlAnd, Criteria2:="<=" & _ Replace(CDbl(CDate("26.11.2013 15:45")), ",", ".") End Sub
[/vba]
на самом деле я пытался сразу использовать CDbl(CDate.... но очевидно не учел региональные стандарты и ничего недобившись обратился к вам. Еще раз огромное спасибо
PS: Да на планете смотрел я просто ответы писать не успеваю Poltava
Сообщение отредактировал Poltava - Вторник, 28.01.2014, 23:12
Прикол в том, что ВБА в качестве разделителя принимает только точку. Но CDBL ставит разделителем запятую при любом системном разделителе. Почему так - вопрос к разработчикам. Из версии к версии Экса работа с датами сходна с шаманством. Причем в каждой версии заклинания разные
Прикол в том, что ВБА в качестве разделителя принимает только точку. Но CDBL ставит разделителем запятую при любом системном разделителе. Почему так - вопрос к разработчикам. Из версии к версии Экса работа с датами сходна с шаманством. Причем в каждой версии заклинания разные KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728