Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
1

Фильтрация даты

20.08.2018, 10:18. Показов 2109. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Я столкнулся с проблемой. Вот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub CommandButton1_Click()
    Windows("test.xlsm").Activate
 
    Dim m(1 To 12), i&
    Dim b(1 To 12)
    Dim d(1 To 12)
    For i = 1 To 12
        If Filter_date("CheckBox" & i) = True _
        Then m(i) = Filter_date("CheckBox" & i).Caption
        If i = 1 Or i = 3 Or i = 5 Or i = 7 Or i = 8 Or i = 10 Or i = 12 Then
            b(i) = 31
        Else
            If i = 4 Or i = 6 Or i = 9 Or i = 11 Then
                b(i) = 30
            Else
                b(i) = 28
            End If
        End If
        d(i) = m(i) & "/" & b(i) & "/2018"
    Next
    
    Range("A1:Y200000").AutoFilter 11, d, xlFilterValues
   
    
    Sheets("Tech").Select
    Range("A1").Select
    Unload Filter_date
End Sub
Почему-то выводит ошибку вот здесь:
Visual Basic
1
Range("A1:Y200000").AutoFilter 11, d, xlFilterValues
Если сталкивались с этим, поделитесь, пожалуйста. Спасибо!
Миниатюры
Фильтрация даты  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2018, 10:18
Ответы с готовыми решениями:

При выборе даты в календаре - заполнять ячейки по порядку до определенной даты и рядом высвечивать день недели
Здравствуйте. Нужна ваша помощь. В программе есть написанный на VBA календарь. нужно написать код,...

Фильтрация данных от одной даты до другой
Не получается создать условие для фильтрации данных в бд. Если фильтровать по одной дате, то все...

Фильтрация даты в таблице, используя dateTimePicker
И снова всем привет) Моя третья, и скорее всего не последняя тема Суть в чем У меня есть...

Вывод даты из базы и подсчет строк где втстречаются эти даты
В таблице mysql есть поле где хранится дата. и это дата встречается в этой таблице по несколько...

23
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 10:37 2
у вас переменная d чему равна
у компа 0

Добавлено через 1 минуту
или вообще ""
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 10:39  [ТС] 3
snipe, d(i) = m(i) & "/" & b(i) & "/2018"/

Добавлено через 14 секунд
snipe, Это не верно?
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 10:45 4
вот тут
Range("A1:Y200000").AutoFilter 11, d, xlFilterValues
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 10:55  [ТС] 5
snipe, Тогда почему здесь работает? Фильтрация не даты, а слов:
Visual Basic
1
2
3
4
5
6
 Dim f(1 To 3), i&
    For i = 1 To 3
        If Filter("CheckBox" & i) = True _
        Then f(i) = Filter("CheckBox" & i).Caption  'i
    Next
    Range("A1:Y200000").AutoFilter 1, f, xlFilterValues
Добавлено через 5 минут
snipe, Как тогда нужно писать?
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 10:55 6
и для определения последнего дня месяца есть другое решение
т.к. случай 29 февраля у вас вообще не рассматривается
Visual Basic
1
2
3
4
5
For i = 1 To 12
If Filter_date("CheckBox" & i) = True  Then
d(i)= Format(DateSerial(2018, i + 1, 1) - 1,"mmmm/dd/yyyy")
End If
Next i
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 11:13  [ТС] 7
snipe, а как тогда будет, если все вместе сложить?

Добавлено через 54 секунды
snipe,
Visual Basic
1
Range("A1:Y200000").AutoFilter 11, d, xlFilterValues
здесь все равно ошибка
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 11:39 8
вот так у меня получилось
Visual Basic
1
2
3
4
5
6
7
Dim d$(1 To 12)
For i = 1 To 12
If Filter_date("CheckBox" & i) = True  Then
d(i) = DateSerial(2018, i + 1, 1) - 1
End If
Next i
Range("A1:Y200000").AutoFilter AutoFilter Field:=11, Criteria1:=d, Operator:=xlFilterValues
при этом сам фильтр должен быть уже установлен
если он не установлен вылетает ошибка

кроме того я не понял почему вы отображаете дату как январь/31/2018
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 11:48  [ТС] 9
snipe,
Цитата Сообщение от snipe Посмотреть сообщение
кроме того я не понял почему вы отображаете дату как январь/31/2018
Нет, только так: 01/31/2018
Все равно не выходит
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 11:52 10
m(i) = Filter_date("CheckBox" & i).Caption
вот эта запись говорит о том что i элементу массива m присвоить значение надписи чекбокса
а судя по рисунку у вас там стоит январь
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 12:10 11
Лучший ответ Сообщение было отмечено warword как решение

Решение

выполните следующие действия (см. аттач)
1. Активируйте окно Local Window
2. Установите курсор в этой строке и нажмите F9
3. Нажмите F8
4. Нажмите F5
5. В окне Locals найдите переменную d и щелкните по квадратику с плюсиком
и посмотрите какие значения у элементов этого массива
если они отличаются от тех что в таблице то надо приводить к нужному стандарту
Миниатюры
Фильтрация даты  
1
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 12:33  [ТС] 12
snipe, да, тут 1/31/2018. А как сделать так, чтобы было 01/31/2018?
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 12:39 13
Format("1/31/2018", "mm\/dd\/yyyy")
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
20.08.2018, 12:57  [ТС] 14
snipe, Все равно ошибка в том же месте
Миниатюры
Фильтрация даты  
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
20.08.2018, 13:01 15
Цитата Сообщение от snipe Посмотреть сообщение
при этом сам фильтр должен быть уже установлен
если он не установлен вылетает ошибка
установите сначала фильтр а потом запустите макрос
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
21.08.2018, 11:22  [ТС] 16
snipe,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Dim d$(1 To 12)
    Dim test As Integer
    test = 0
    For y = 1 To 4
        If Filter_date("CheckBox2" & y) = True Then
            test = test + 1
            For i = 1 To 12
                If Filter_date("CheckBox" & i) = True Then
                    d(i) = DateSerial(Filter_date("CheckBox2" & y).Caption, i + 1, 1) - 1
'                    d(i) = DateSerial(2018, i + 1, 1) - 1
        '            d(i) = Format(DateSerial(2018, i + 1, 1) - 1, "mm\/dd\/yyyy")
                End If
            Next i
        End If
    Next y
    Range("A1:H200000").AutoFilter Field:=5, Criteria1:=d, Operator:=xlFilterValues
Мне нужно еще фильтровать год. Checkbox21, Checkbox22, Checkbox23, Checkbox24 - это годы
Изображения
 
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
21.08.2018, 12:11 17
ну так заведите массив для годов
потом переберите все возможные комбинации годов и месяцев
и получите фильтр
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
21.08.2018, 15:15  [ТС] 18
snipe,

Добавлено через 1 час 12 минут
snipe,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Dim d$(1 To 4, 1 To 12)
    Dim year As Integer
    For y = 1 To 4
        If Filter_date("CheckBox2" & y) = True Then
            year = Filter_date("CheckBox2" & y).Caption
            For i = 1 To 12
                If Filter_date("CheckBox" & i) = True Then
'                    d(i) = DateSerial(Filter_date("CheckBox2" & y).Caption, i + 1, 1) - 1
'                    d(i) = DateSerial(2018, i + 1, 1) - 1
                    d(y, i) = Format(DateSerial(year, i + 1, 1) - 1, "m/d/yyyy")
                End If
            Next i
        End If
    Next y
    Range("A1:H200000").AutoFilter Field:=5, Criteria1:=d, Operator:=xlFilterValues
У меня такой код получается. Хотя результат будет ""
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
21.08.2018, 18:37 19
вы бы файлик выложили
интересует столбец с датами и названием этого столбца, а так же форма с кодом
остальные данные можно(нужно) удалить
0
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 116
22.08.2018, 12:46  [ТС] 20
snipe,
0
22.08.2018, 12:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2018, 12:46
Помогаю со студенческими работами здесь

Как сделать выборку периода даты в запросе с вычислением от запрошенной даты
Доброго времени суток! Есть форма, есть подчинённая форма, при запуске формы запрашивается...

Автоматический подсчет периода, при даты начала и даты окончания
Здравствуйте, есть дата начала и дата окончания, если дата начала выбирается первым, а после дата...

Получение размера, даты создания, даты последнего доступа файлов
Прошу помощи. С помощью каких фунций / процедур можно получить размер, дату создания, дату...

Выборка данных через сравнение даты в DataGridView и текущей даты
Ситуация такова: в датагриде есть столбец с определенной датой. Нужно сравнить все даты с этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru