powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос + Расширенный фильтр + Даты = Тупик
8 сообщений из 8, страница 1 из 1
Макрос + Расширенный фильтр + Даты = Тупик
    #38273575
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу помочь разобраться.

Хочу применить расширенный фильтр к датам. Делаю самим Экселем: Данные - расширенный фильтр, далее по тексту... Всё получается!

Пробую в ячейки критериев ввести точно такую же информацию через поля формы - выдаёт ошибку. Проблема явно в представлении (формате) даты. Но почему Эксель в одном случае умеет интерпретировать текстовую строку, а в другом нет? На компе у меня установлены региональные настройки dd.mm.yy, но независимо от этого, Эксель примет через окна формы формат: mm/dd/yy или шизоидный вариант: 41234, а мой родной: dd.mm.yy игнорирует.

Очень хочется вводить критерии даты, через textboxы формы. Файл (.xlsb) с примером прилагаю.

Спасибо за ответы.
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38273961
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valll,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub CommandButton1_Click()
    With Sheets("Лист1")
        .Range("H3") = ">" & CDbl(CDate(TextBox1.Text))
        .Range("I3") = "<" & CDbl(CDate(TextBox2.Text))
        .Range("H8:I28").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
                                        Range("H2:I3"), Unique:=False
        'чисто для эстетики
        .Range("H3") = ">" & TextBox1.Text: .Range("I3") = "<" & TextBox2.Text
    End With
End Sub
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274040
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за пример. Идея разделить условие от даты, а дату преобразовать приходила мне в голову, но есть два пункта по которым я отказался:
1. В одном textboxe должно быть записано условие полностью как текстовая строка.
2. В конце концов могут быть не только даты, но и текст и числа.

Можно конечно отыскивать в строке спецзнаки, потом преобразовывать дату в определённый формат, но как-то это всё на "помочах"... Непонятно само явление: от руки вношу в ячейку условия - всё считает, те же условия через макрос - ошибка!

Но видимо придётся "городильню городить" с препарированием строки внесённой в текстбокс.

Спасибо за поддержку.
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274066
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valll,

Чтобы понимали, почему при фильтрации вручную работает, а из VBA нет: Как Excel воспринимает данные?
Я так полагаю, что в Расширенном фильтре присутствует парсинг данных ячеек с критериями.

Примерно, по простому можно сделать так:
Код: vbnet
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.
Private Sub CommandButton1_Click()
    Dim vCr1, vCr2, sOp1 As String, sOp2 As String
    vCr1 = Replace(Replace(Replace(TextBox1.Text, ">", ""), "<", ""), "=", "")
    vCr2 = Replace(Replace(Replace(TextBox2.Text, ">", ""), "<", ""), "=", "")
    sOp1 = Replace(TextBox1.Text, vCr1, "")
    sOp2 = Replace(TextBox2.Text, vCr2, "")
    With Sheets("Лист1")
        .Range("H2:I3").NumberFormat = "@"
        If IsDate(vCr1) Then
            .Range("H3").NumberFormat = "": vCr1 = CDbl(CDate(vCr1))
        Else
            If IsNumeric(vCr1) And vCr1 <> "" Then .Range("H3").NumberFormat = "": vCr1 = CDbl(vCr1)
        End If
        If IsDate(vCr2) Then
            .Range("I3").NumberFormat = "": vCr2 = CDbl(CDate(vCr2))
        Else
            If IsNumeric(vCr2) And vCr2 <> "" Then .Range("I3").NumberFormat = "": vCr2 = CDbl(vCr2)
        End If
        .Range("H3") = sOp1 & vCr1
        .Range("I3") = sOp2 & vCr2
        .Range("H8:I28").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
                                        Range("H2:I3"), Unique:=False
        'чисто для эстетики
        .Range("H3") = TextBox1.Text: .Range("I3") = TextBox2.Text
    End With
End Sub
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274073
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist

Ловко вы на хирургический стол положили TextBox! Про числовое значение даты известно и понятно, непонятно - почему сам Эксель правильно интерпретирует текстовую строку ">01.01.13", а его же примочка VBA спотыкается. Явный косяк, чтобы кто не говорил. И мой пример явное тому подтверждение. Вообщем, чтобы не городить "байду", а с учётом 40-ка реальных текстбоксов - это значит ещё и с циклами и проверками каждого знака... я решил кардинально - написал следующее примечание пользователям:

"ВНИМАНИЕ! При написании даты нельзя использовать формат: dd.mm.yy (yyyy). Вам придётся применять уродливый формат США: mm/dd/yy (yyyy). Иначе расширенный фильтр Excel с макросом не работает." Вот и решение.
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274086
Фотография Serge 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValllЭксель правильно интерпретирует текстовую строку ">01.01.13", а его же примочка VBA спотыкаетсяВалерий, VBA - это не "примочка" Excel, а язык программирования для всего офиса и не только :)
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274480
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей, привет!

Да я понимаю. Это я так от обиды. Дальше хуже. Если вставить даты (>01.01.13) через форму, а потом средствами Экселя отфильтровать, то всё как положено - фильтруется! Значит косяк именно В VBA, он явно не понимает локальных настроек компьютера, локализованной версии Excel. Может есть какой оператор, который как-то подскажет VBA, что надо использовать локальные настройки?

Конечно проблема пустяшная. Просто думал как-то облагородить расширенный фильтр с помощью формы, чтобы удобнее было фильтры формировать, там проверки, подставки и т.д. Но не срослось...
...
Рейтинг: 0 / 0
Макрос + Расширенный фильтр + Даты = Тупик
    #38274588
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valll,

Нет ничего такого. Если Вы макросом заносите дату(>01.01.13) - то она все равно ТЕКСТ. И уже в алгоритмах Расширенного фильра этот текст парсится и из него извлекается дата, в зависимости от локальных настроек и настроек глобальных(>01/01/13). VBA же не имеет разных локализаций - он распространяется лишь на английском для всех локализаций Excel. Следовательно он может опрерировать в полной мере верно типами данных только этой локали. И вызывает он расширенный фильтр Excel, передавая типы согласно своей локали, а не опираясь на локаль Excel.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Макрос + Расширенный фильтр + Даты = Тупик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]