Страницы: 1
RSS
Автофильтр через VBA - даты
 
Автофильтр через макросы работает, если фильтруем по числам или по тексту, а вот если пробовать фильтровать даты через VBA - то список пустой, хотя условие стоит, и если зайтив условие и нажать ОК, то автофильтр сработает нормально .  
 
Руками работает - макросом нет. :( в чем прикол ? и это именно фильтр по датам.
 
Я когда-то задавал такой вопрос: сейчас найду выложу.
 
Наврал, это был не мой вопрос  
http://www.planetaexcel.ru/forum.php?thread_id=5079
 
Вот кусок кода  
Selection.AutoFilter Field:=1, Criteria1:=">=" & Format(Range("F7"), "#"), Operator:=xlAnd _  
               , Criteria2:="<=" & Format(Range("G7"), "#")  
где, F7 и G7 - ячейки с датами.
 
The_Prist  
Ты прав надо использовать  CDbl  
я так понимаю, Excel даты превращает в цифры т.е. 01/01/09 это 49908 (к примеру)  
 
Спасибо, похожие темы поискал - не нашел, поэтому и задал.  
 
Как всегда счас покопался в инет нешел ответ:  
http://www.progz.ru/forum/index.php?showtopic=17126  
 
P.S.  
У меня такое чувство что раньше или задавал этот вопрос или видел решение :)  
 
ТЕМА ЗАКРЫТА.
 
{quote}{login=The_Prist}{date=07.10.2009 03:09}{thema=}{post}Selection.AutoFilter Field:=1, Criteria1:=">" & CDbl(DateValue("10.09.2009")), Operator:=xlAnd{/post}{/quote}  
Сегодня на работе было много мороки - переезд в новое здание, новое оборудование, новое ПО... Устал прилично. Читаю кусочек кода, Prist'а и никак не могу понять: на фига тут буква "Ы"? И только после третьего прочтения дошло до меня: не "CDЫ", а "CDbl".
 
Или просто использовать такой синтаксис даты:  
Selection.AutoFilter Field:=1, Criteria1:=">2009-09-10"
 
помогите разобраться,плз.  
есть таблица с автофильтром.нужно часто менять его условия(по содержит)пытаюсь упростить с помощью текстовых полей для ввода этих условий,вот только не понятно - почему только первый макрос привязанный к первому TextBox1 работает как надо(фильтр по содержит)остальные же устанавливают условие равно и при этом не фильтруют даже если вбита полная информация.Вот то, что у меня получилось(в общем с вашей же помощью)  
Dim a_text, b_text, c_text As String  
 
 
Private Sub TextBox1_Change()  
 
If TextBox1.Text = "" Then  
Selection.AutoFilter Field:=2  
Else  
a_text = "*" & TextBox1.Text & "*"  
Selection.AutoFilter Field:=2, Criteria1:=a_text, Operator:=xlAnd  
End If  
 
End Sub  
 
Private Sub TextBox2_Change()  
 
If TextBox2.Text = "" Then  
Selection.AutoFilter Field:=7  
Else  
b_text = "*" & TextBox1.Text & "*"  
Selection.AutoFilter Field:=7, Criteria1:=b_text, Operator:=xlAnd  
End If  
 
End Sub  
 
Private Sub TextBox3_Change()  
 
If TextBox3.Text = "" Then  
Selection.AutoFilter Field:=15  
Else  
c_text = "*" & TextBox1.Text & "*"  
Selection.AutoFilter Field:=15, Criteria1:=c_text, Operator:=xlAnd  
End If  
 
End Sub  
 
Помогите подправить)
 
Нет ли у Вас пустых столбцов в таблице? Ведь Field:=7 и Field:=15 означают поля области, к которой применяется фильтр. И если до 7-го столбца будет пустой столбец, отсчет полей начнется после него.  
 
Selection лучше бы не использовать.  
И выложите Ваш файл, чтобы нам не гадать.
 
А можно задать условие для автофильтра по ссылке см. файл
 
Sub Macro1()  
   [S2].AutoFilter
   [S2].AutoFilter Field:=19, Criteria1:=">=" & CDbl([E1])
End Sub
 
Evgen777,  
вы при записи данных в переменные a_text, b_text, c_text везде по ошибке использовали одно и то же значение - TextBox1.Text:    
a_text = "*" & TextBox1.Text & "*"  
b_text = "*" & TextBox1.Text & "*"  
c_text = "*" & TextBox1.Text & "*"  
 
вот у вас всё по критерию "содержит" TextBox1.Text и фильтровалось  
И вообще, эти глобальные на уровне модуля переменные не нужны.  
 
Используйте непосредственно данные из TextBox'ов.  
Вот так работает. Проверил.  
 
Private Sub TextBox1_Change()  
  If TextBox1.text = "" Then  
     Selection.AutoFilter Field:=2  
  Else  
     Selection.AutoFilter Field:=2, Criteria1:="*" & TextBox1.text & "*"  
  End If  
End Sub  
 
Private Sub TextBox2_Change()  
  If TextBox2.text = "" Then  
     Selection.AutoFilter Field:=7  
  Else  
     Selection.AutoFilter Field:=7, Criteria1:="*" & TextBox2.text & "*"  
  End If  
End Sub  
 
Private Sub TextBox3_Change()  
  If TextBox3.text = "" Then  
     Selection.AutoFilter Field:=15  
  Else  
     Selection.AutoFilter Field:=15, Criteria1:="*" & TextBox3.text & "*"  
  End If  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Казанский}{date=11.08.2010 01:04}{thema=Azam}{post}Sub Macro1()  
   [S2].AutoFilter
   [S2].AutoFilter Field:=19, Criteria1:=">=" & CDbl([E1])
End Sub{/post}{/quote}  
 
Спасибо !!!  
Азам.
 
спасибо Alex_ST  
все работает, просто и эффективно)))
 
А как заставить фильтровать по условию из соседнего листа?  
Есть 4 листа с данными и 3 условия  
Каждый раз лезть в листы и править нереально нудно...
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
Пробуйте:
 
Супер!!!
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
Всем привет,  
 
И все таки не работает. Не стал заводить новую тему, потому как она была бы в точности идентична автору топа.  
 
Дату считаю функцией - последняя пятница от текущей даты.  
 
Function LastFriday(CurrentDate As Date) As Double  
 LastFriday = Fix(CurrentDate - Weekday(CurrentDate, vbSaturday)) + 0.6667  
End Function  
 
условие на автофильтр формирую так  
 
        On Error Resume Next  
        .ShowAllData  
        If Err <> 0 Then .Rows("9:9").AutoFilter  
        On Error GoTo 0  
        LastRow = .Range("C2").Value  
        .Range(.Cells(9, 1), .Cells(LastRow, 35)).AutoFilter Field:=18, Criteria1:=">" & LastFriday(Now)  
 
В результате пустая выборка.    
Открываю руками выборку, жму OK, все работает. Что можете посоветовать?
 
Привет, Влад! Попробуй результат вывести в ячейку, а для критерия ссылку на эту ячейку.
 
Всем привет!)  
 
Владимир, попробуйте вместо Double использовать Long.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Спасибо Юра, Спасибо Саша,  
 
Саш, Long не подходит. мне еще время надо 16:00 учесть (0,6667).    
Попробовал через ячейку, да собственно и через переменную также - фильтр принимает значение только по значащим цифрам (разделитель десятичной дроби пропадает), почему понять не могу...
 
Все понял, время не принимает, заработало так :  
 
Criteria1:=">" & LastFriday(Now) & "16:00"    
 
Всем спасибо.
 
Ну вот тебе - здрасте! Набрел на эту тему скучая. Вылизывать вас, друзья, не стану. И так знаете мое отношение к вам. Хотя.... отдельное замечание к Леше(Казанский). Леш, мне так нравятся твои тесты! Умница - не передаст того значения, к-рое я всегда вкладываю, упоминая тебя. И я и (надеюсь) весь наш форум любим тебя.    
Черт, сейчас получу подзатыльник. Ну, оно того стоило.
Я сам - дурнее всякого примера! ...
 
Виноват торопился, жалко править нельзя:  
 
вместо Criteria1:=">" & LastFriday(Now) & "16:00"    
 
прошу читать    
Criteria1:=">" & LastFriday(Now), Criteria2:=">16:00"
 
Всем добрый день снова хочу поднять данную тему:  
Аналогичная проблема с автофильтрацией по дате  
 
Дата у меня вводится в форме в textBox, прочитал что дату надо преобразовывать в Double.  
 
Но все так же у меня выдает пустую фильтрацию и надо прищелкивать автофильтр в ручную.  
 
Пробовал несколько вариантов результат один и тот же.  
EndDate = CStr(TextBox2.Value)  
Sheets("xxx").ListObjects("yyy").Range.AutoFilter Field:=1, Criteria1:="<=" & Application.Text(EndDate, "@"), Operator:=xlAnd  
 
Пробовал так    
Sheets("xxx").ListObjects("yyy").Range.AutoFilter Field:=1, Criteria1:="<=" & CDbl(TextBox2.Value), Operator:=xlAnd  
Выдает ошибку Type mismatch  
 
Подскажите где я ошибаюсь...  
Или может быть есть другой вариант для реализации получения остатков на конечную дату, посоветуйте?  
 
пример прилагаю
 
немного покурив варианты сделал гибрид формулы и она заработала :  
Sheets("xxx").ListObjects("yyy").Range.AutoFilter Field:=1, Criteria1:="<=" & Format(TextBox2.Value, "#")
 
Добрый вечер. Есть таблица, в одном из столбцов вводится дата в формате "12.янв" и так целый месяц и каждый месяц. Подскажите как можно используя автофильтр отфильтровать значения по месяцу, т.е. по какому месяцу фильтровать данные брались из ячейки L5.
 
В допстолбец =месяц(...)
Я сам - дурнее всякого примера! ...
 
Понадобилось устанавливать фильтр за предидущий день, нашёл на форуме эту тему.  
В моём случае код  
AutoFilter Field:=8, Criteria1:="<=" & CDbl(Date - 1) работает  
а  
AutoFilter Field:=8, Criteria1:="=" & CDbl(Date - 1) нет  
 
Прошу прощения за лишние макросы, файл чужой некогда было разбираться, что можно удалить, а что нет. Нужен Макрос 6 из Модуля 2.  
 
А если удастся код, который будет учитывать выходные (т.е. не просто Date-1), то нашей радости не будет границ!!!  
 
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>  
 
<EM>http://www.planetaexcel.ru/forum.php?thread_id=8735</EM>
Страницы: 1
Читают тему
Наверх