Страницы: 1
RSS
ListBox и автофильтр (условие...)
 
Доброго времени суток уважаемые жители Планеты! Заранее прошу простить, если тема подобного рода уже была. В поиске глянул, но не нашел. Столкнулся с не большей проблемой в вопросе автофильтра. Существует таблица: Дата/Время/Адрес, так же есть форма с ЛистБоксом и Текстбоксами. Пытаюсь сделать следующее: в Текстбоксах(Дата) вношу начальную и конечную даты для фильтрования на листе. Пробовал через макрорекодер, но почему то автофильтр просто сварачивается (хотя в условиях хранит указаные данные). Подскажите, что не так? И еще, хотел бы узнать, как можно в листБоксе отобразить данные как и через автофильтр (имею ввиду: больше или равно... и меньше...)? Заранее спасибо всем откликнувшимся!
 
Код
Private Sub CommandButton1_Click()
    ' если дата и время в одном столбце 
    ' (почему бы так не сделать, - куда удобнее было бы...)
    date1 = CDbl(CDate(Me.TextBox6 & " " & Me.TextBox5))    ' преобразуем дату+время в число
    date2 = CDbl(CDate(Me.TextBox2 & " " & Me.TextBox4))    ' аналогично

    Range("a:c").AutoFilter Field:=1, Criteria1:=" >=" & Replace(date1, ",", "."), Criteria2:=" <=" & Replace(date2, ",", ".")
End Sub


или

Код
Private Sub CommandButton1_Click()
    ' если дата и время в разных столбцах
    date1 = Fix(CDbl(CDate(Me.TextBox6)))     ' преобразуем дату в число
    date2 = Fix(CDbl(CDate(Me.TextBox2)))    ' аналогично
    Range("a:c").AutoFilter Field:=1, Criteria1:=">=" & date1, Criteria2:="<=" & date2    ' фильтр по дате


    time1 = CDbl(CDate(Me.TextBox5))   ' преобразуем время в число
    time2 = CDbl(CDate(Me.TextBox4))   ' аналогично

    ' фильтр по времени
    ' не работает, т.к. во втором столбце формат ячеек ТЕКСТОВЫЙ (там хранится текст, а не время)
    Range("a:c").AutoFilter Field:=2, Criteria1:=" >=" & Replace(time1, ",", "."), Criteria2:=" <=" & Replace(time2, ",", ".")
End Sub
Изменено: EducatedFool - 04.10.2013 00:25:59
 
Спасибо Вам огромное! Подскажите, а зачем дату нужно преобразовывать в число? И почему данные,ранее заносимые мною, в условие автофильтра не фильтровались?
Изменено: Ronin751 - 04.10.2013 00:32:00
 
Цитата
Подскажите, а зачем дату нужно преобразовывать в число?
потому что так устроен Excel...
даты фильтруются как числа

Цитата
И почему данные,ранее заносимые мною, в условие автофильтра не фильтровались?
потому что были занесены как текст,
а Excel не может сравнивать число (дату из ячейки) с текстом (который вы задали в критерии фильтра)
 
Спасибо! Теперь понял.
 
Уважаемые чародеи макросов, подскажите, как можно отобразить данные в ЛистБоксе за определенный период?
 
Бежать циклом по списку и смотреть: попала дата в диапазон - в ЛистБокс её. Или предварительно в массив, а потом в ЛистБокс.
 
См. вариант.
 
Даже и спорить не буду. Если указана одна дата, что делать я понимаю. А вот если выбран период только с 1 по 3. В диапазон же входят только 1 и 2 числа. Как ему это обьяснить? Тем более, что там могут быть периоды исчесляемые месяцами. А еще и время могут указать. Допустим за период с 1.10.13 по 3.10.13, с 7:00 до 9:00. Как это воспроизвести, даже и догадки не имею.
 
У меня выбран ПЕРИОД!
 
Спасибо Вам огромное! Примерно понял. Буду пытаться. Может и в правду, дату и время лучше в одной ячейке держать?
 
А взять, и проверить? :-)
 
:D  Да, точно!!!!!!!!! Простите.
 
Прошу меня простить, что так долго не отвечал. Был без интернета.
EducatedFool и Юрий М, спасибо Вам огромное за помощь!
Но так и не могу сообразить, как отобразить данные в ЛистБоксе по указанным критериям? Помогите плз!
 
Как отбирать по датам - я Вам показал. Для позиций сделайте аналогично. А вот со временем не ясно - у Вас же по одному событию за каждую дату. Где тут может быть период начало-окончание?
 
Прошу прощения за даты. Изменил.
Имею ввиду следующее:
Выбираем нужную позицию, указываем нужную дату (или период дат), указываем период времени, нажимаем ОК и в листбоксе отобразились данные по выбраным критэриям. Как через автофильтр но только в листбоксе.Не могу понять, как обьяснить Экселю, что анализировать нужно несколько столбцов одновременно и отображать только входящее в диапазон?
Изменено: Ronin751 - 08.10.2013 13:46:08
 
Цитата
Не могу понять, как обьяснить Экселю, что анализировать нужно несколько столбцов
Сначала проверка по первому столбцу: если условие выполняется - по второму, если условие выполняется - по третьему.
 
Прошу прощения, но не получается.  :cry:
 
У Вас в файле опять непонятки: какое время в таблице является началом, а какое окончанием. А за 03.09.2013 вообще нечётное количество данных... Может быть есть смысл время начала и окончания разнести по разным столбцам?
 
Это своего рода журнал. В графе время указывается время получения звонка. Количество звонков предугадать не возможно. Вот и хотелось бы иметь возможность отображать данные по нескольким критериям одновременно. Чтоб за период с, допустим, 1 по 3.09.13 отобразились лишь те строки звонок в которых поступил начиная с,допустим 7:30 до 10:30 с учетом лишь, допустим, позиции 3. И по идее в ЛистБоксе должны отобразиться лишь 2 строки. Первая за 01.09.2013/  9:30/  3  ,Вторая 03.09.2013/  9:30/  3.
 
Цитата
по идее в ЛистБоксе должны отобразиться лишь 2 строки.
А я насчитал 7 строк...
 
:o  Как же может быть 7 строк? Если среди позиций №3 в период за 1,2,3.09.13 было всего две подходящие записи по временному периоду с 7:30 до 10:30.
 
Строки 4, 19, 22, 25, 28, 49, 52 попадают под условия.
 
Цитата
Строки 4, 19, 22, 25, 28, 49, 52 попадают под условия.
Не принимайте за наглость, но соглашусь лишь со строками №4 и 28
Строка №19 время 00:30 (не попадает в диапазон с 07:30 до 10:30)
Строка №22 время 03:30 (не попадает в диапазон с 07:30 до 10:30)
Строка №25 время 06:30 (не попадает в диапазон с 07:30 до 10:30)
Строки №49,52 дата 5.09.13 (не попадает в диапазон с 1.09.13 до 3.09.13)
 
В Вашем примере временной диапазон 00:00...11:42
Это начинает утомлять...
 
И диапазон дат в примере с 01.01.2000 по 09.10.2013...
 
Простите!  Не хотел Вас обидеть или удручать пустыми разговорами, и тем более отбирать, по-чем зря, Ваше время.  
Цитата
В Вашем примере временной диапазон 00:00...11:42
И диапазон дат в примере с 01.01.2000 по 09.10.2013...
Это первоначальная форма. В ТекстБоксах "Дата(начало)" и "Время(начало)", дата и время установлены как образец для пользователя (чтоб пользователь знал в каком виде вносить значения). А диапазон устанавливается самим пользователем.
 
Если, как образец, то зачем утверждать, что должны отобраться только две строки?
См. файл. И обратите внимание - у Вас часть ячеек со временем заполнена в формате дата + время. Исправил.
 
Цитата
чтоб пользователь знал в каком виде вносить значения
Тогда следует выполнять проверки, которые НЕ ДАДУТ пользователю ввести данные в другом формате. А для ввода дат вообще следует использовать календарь.
 
Спасибо Вам огромное! Теперь понял почему у меня не работало. Всё делал так же кроме:
Код
TimeStart = CDbl(CDate(Me.TextBox3))
    TimeFinish = CDbl(CDate(Me.TextBox4))
    Poz = CLng(Me.ComboBox1)

Не переводил в число и из-за этого не отображались данные.
Еще раз ОГРОМНОЕ СПАСИБО!!!!! :D
Страницы: 1
Читают тему
Наверх