Фон
Пока я пытался решить проблему для другого пользователя, я столкнулся, по-видимому, с локальной проблемой.
Представьте себе несколько очень простых примеров данных (являющихся истинными значениями даты и времени):
| 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
имеет гораздо больше десятичных чисел, чем показанные. Вставка полного числового значения в строковую переменную устранила исчезновение запятой и показала отформатированное значение даты / времени, однако результат не отображается.