Значения AutoFilter DateTime — проблема с локальной десятичной точкой

Фон

Пока я пытался решить проблему для другого пользователя, я столкнулся, по-видимому, с локальной проблемой.

Представьте себе несколько очень простых примеров данных (которые являются истинными значениями даты и времени):

| DateTimeVals   |
|----------------|
| 1-1-2019 01:00 |
| 2-1-2019 01:00 |
| 3-1-2019 01:00 |
| 4-1-2019 01:00 |
| 5-1-2019 01:00 |

Не нужно ничего усложнять, чтобы показать вам проблему. Давайте представим, что нам нужно отфильтровать 3-1-2019 01:00 (3 января). Просто используя:

Range("A1").AutoFilter Field:=1, Criteria1:="3-1-2019 01:00"

Работает просто отлично, жестко запрограммированная строковая переменная работает, но я подумал о чем-то более динамическом, фильтрующем истинные числовые значения, как показано ниже.


Код

Sub test()

Dim SearchNum As Double: SearchNum = DateValue("3-1-2019") + TimeValue("1:00")
Range("A1").AutoFilter Field:=1, Criteria1:=">=" & SearchNum, Operator:=xlAnd, Criteria2:="<=" & SearchNum

End Sub

Наблюдение за этой переменной через WATCHES показывает следующее:

введите здесь описание изображения

Но примененный фильтр показывает 0 результатов:

введите здесь описание изображения

И вот нечетная часть, примененный фильтр говорит мне, что я, по-видимому, отфильтровал полное значение без десятичной запятой.

введите здесь описание изображения

Добавление запятой к этому числу вручную превращало число в форматированное значение даты/времени. Но результат не показан.


Временное решение

Я нашел способ обойти это, используя следующий код:

Sub test()

Dim str As String: str = DateSerial(2019, 1, 3) & " " & Format(TimeSerial(1, 0, 0), "hh:mm")
Range("A1").AutoFilter Field:=1, Criteria1:=str

End Sub

Вопрос

Хотя я читал о том, как MS мог пренебречь AutoFilter, я думаю, что описанная мной проблема должна иметь какое-то отношение к локальным настройкам. Как VBA вставить критерии как целое число? И как этого избежать? Есть ли другой способ, кроме моего обходного пути (или вспомогательного столбца)?


Примечание.

  • Изменение длинного числа путем ручной вставки запятой изменило значение в правильном формате даты/времени.
  • Работа с TimeValue подвержена ошибкам с плавающей запятой, так как 1:00 имеет гораздо больше десятичных знаков, чем показанные. Вставка полного числового значения в строковую переменную решила проблему исчезновения запятой и показала отформатированное значение даты/времени, однако результат не отображается.

person JvdV    schedule 02.10.2019    source источник
comment
Проверьте это: docs.microsoft.com/en-us/office/vba/language/reference/   -  person David García Bodego    schedule 02.10.2019
comment
Вероятно, запятая (,) исчезла, потому что запятая установлена ​​​​как символ группировки цифр в ваших региональных настройках.   -  person Teamothy    schedule 02.10.2019
comment
@Teamothy, запятая - мой десятичный разделитель, а точка - символ группировки. Однако игра с этим тоже не помогла. Спасибо за предложение. Сейчас я нахожусь в точке, где я знаю, что должна быть ошибка с плавающей запятой, поскольку 1:00 на самом деле 0,0416666666666667. Помещение 43467.0416666666666667 в качестве критерия фактически отображалось как 3-1-2019 1:00 в фильтре, однако результат не отображается....   -  person JvdV    schedule 02.10.2019