Скорее, вопрос или мысли вслух... Пример тогда позднее, но высказывания приветствуются.
Обнаружил очень «тонкую» ошибку.
Ввожу в диапазон условий расширенного фильтра в соответствующее поле значение условия, а именно: 01
Накладываю фильтр в коде (но там и кода-то нет: ссылка на диапазон условий...) – выдаёт все строки, что в примере ниже с 1-й по 13-ю. А расширенный фильтр, установленный вручную, или функция REGEX работают верно: только строка 1.
Проблема с ведущим нулём, что ли? Тип данных: Текст.
На скриншоте видно, что свойство IsNumeric = True. У меня берётся, стало быть, NumericValue, а надо StringValue.
В результате ввожу условие так: .01
В остальных случаях всё работает правильно.
Что бы это значило?
А в коде смотреть нечего. Если коротко:
oDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
Тест REGEX:
A B C
1 Д01 01 '=REGEX(A1;"01")
2 Д10 #N/A
3 Д11 #N/A
4 Д12 #N/A
5 Д13 #N/A
6 Д14 #N/A
7 Д15 #N/A
8 Д16 #N/A
9 Д17 #N/A
10 Д18 #N/A
11 Д19 #N/A
12 Д21 #N/A
13 Д31 #N/A
Upd1:
Пример прикреплён в ответе #5.
Уточняю:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
oDescriptor.FilterFields = oFields
@sokol92, присвоение выше производится не напрямую, а через копирование структур, вы понимаете (об этом с вами говорили), так вот объект oFields содержит правильные данные, но в ходе присвоение выше "01" заменяется на "1".
Что делать? Это баг?
Я ведь "загоняю" весь диапазон условий разом и не работаю с полями индивидуально...
Upd1:
Ошибка локализована.
1. Работает правильно:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
2. Работает неправильно:
oDescriptor.FilterFields = oFields
При копировании структур, равно как и при присвоении напрямую (как оказалось, тоже можно), теряется "ведущий нолик.
Свойство StringValue получает значение "1".
Но справа он есть, а слева его уже нет.
oDBRange.FilterDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
Можно ли скопировать поля фильтра выше самостоятельно, одно за другим?
Upd1:
И так не выходит (в цикле):
oDescriptor.FilterFields(i).StringValue = oFields(i).StringValue
Upd2:
При замене DatabaseRange на именованный диапазон (метод Refresh на Filter) проблема осталась. Странно, однако...
Добрый день, @eeigor! Не могли бы Вы выложить файл с примером "странного" макроса?
Владимир, позднее. На работе интернета нет. Работаю с телефоном как могу. При первой возможности. Для меня это активный момент: использую каждый день.
Уважаемые форумчане, посмотрите мой пример. Всё описано и готово к размещению багрепорта.
Прошу высказаться и дать свои предложения по изоляции ошибок. Ошибок сразу две.
@kompilainenn, я могу вас попросить опубликовать багрепорт?
Разместил на forum.openoffice
@Villeroy said: "Очевидно, они сломали то, что работало в старых версиях. Так что это может быть даже отмечено как регресс. Независимо от того, сколько макрокода вы добавляете в электронную таблицу, вы никогда не получите электронную таблицу, которая работает так же плавно, как худшая база данных (которой, без сомнения, является Base)".
Я только смотрю в сторону Base. В MS Access работал профессионально.
Цитата: eeigor от 6 февраля 2021, 22:23@compilainenn, я могу вас попросить опубликовать багрепорт?
Можете, если первую букву моего ника поправите в своем посте.
Цитата: eeigor от 6 февраля 2021, 22:23Всё описано и готово к размещению багрепорта.
Но лучше бы вы это сделали сами, я в Basic ни бум бум, чтобы описать корректно проблему. Другое дело, если будет файл-пример и описание типа: "В А1 должно быть 1, а показывает 0", тогда втупую можно было бы поискать регрессию и найти виновного (если это регрессия)
Цитата: kompilainenn от 6 февраля 2021, 23:23Другое дело, если будет файл-пример
Пример достаточно "убедительный": минимум данных, максимум удобства (вызов макросов гиперрссылкой прямо на листе). Внизу на листе в примере результат фильтра вручную (справа показаны все установки на скриншоте, надо только повторить, чтобы убедиться). Здесь всё правильно (ОК!). А вверху видим, что не фильтрует (BAD!), но если вместо условия "01" ввести ".01" или ".*01", то работает правильно. Более того, все ошибки локализованы. Язык: английский/русский.
Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
Цитата: eeigor от 23 февраля 2021, 10:49
Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
всегда давайте инфо о Лбре из диалога "О программе", без этого трудно понять, с каких версий начинать искать проблему