Даты переключения с дд мм на мм дд в фильтре VBA - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь отфильтровать по дате в Excel, используя VBA.

Даты переносятся при входе в фильтр, при этом месяц и день меняются на U.S вместо европейских дат.

Даты в таблице отформатированы как короткие, а даты, введенные в текстовые поля, имеют правильный формат.

dateselect - флажок для активации фильтра, а datestart и datefinish - это текстовые поля, содержащие даты.

If dateselect = True Then

    With Worksheets("Data").Range("C:C")
      .AutoFilter field:=1, Operator:=xlAnd, Criteria1:=">=" & Datestart, Criteria2:="<=" & datefinish
    End With

End If

Я попытался добавить формат к датам, но получил ошибку переполнения.

If dateselect = True Then

    With Worksheets("Data").Range("C:C")
      .AutoFilter field:=1, Operator:=xlAnd, Criteria1:=">=" & Format(Datestart, dd/mm/yyyy), Criteria2:="<=" & Format(datefinish, dd/mm/yyyy)
    End With

End If

Так что с одним я получаю транспонированные даты, и если я пытаюсь форсировать формат, я получаю переполнение.

1 Ответ

1 голос
/ 10 мая 2019

Если вы используете значения даты в своих ячейках, например, результат = TODAY (), вы можете использовать Range.Autofilter с CDbl сравнениями.

К CDate вы можете убедиться, что ваши переменные«datestart» и «datefinish» также являются значениями даты.

CDbl работает почти идеально, так как значение даты внутренне состоит из целой части (дни с 1900 года) и ее десятичных дробей (часть дня, т.е.часы, минуты, секунды).

With Worksheets("Data").Range("C:C")
    .AutoFilter field:=1, _
    Operator:=xlAnd, _
    Criteria1:=">=" & CDbl(CDate(datestart)), _
    Criteria2:="<=" & CDbl(CDate(datefinish))
End With

Имейте в виду, что критерии <, <=,>,> =, <> будут работать, как указано выше, но если даты должны быть отфильтрованы равными для данной даты, простое "= ..." требует либо точного строкового обозначения дат на вашем рабочем листе (в зависимости от числового формата ячеек), либо следующего, независимо от формата даты:

With Worksheets("Data").Range("C:C")
    .AutoFilter field:=1, _
    Criteria1:="<=" & CDbl(myDate), Operator:=xlAnd, _
    Criteria2:=">=" & CDbl(myDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...