не может выполнить автофильтрацию столбца даты с помощью выражения - PullRequest
0 голосов
/ 26 мая 2020

Я новичок в VBA. Я автоматизирую столбец даты листа Excel, чтобы подсчитать, сколько дат находится между датой начала и датой окончания.

Я закодировал, как показано ниже.

F11 = Application.GetOpenFilename("Copy of CES-Product Backlog (*.xlsm*), *.xlsm*")
  If (F11 <> vbNullString) Then
    If (F11 <> "False") Then
      f_name1 = F11
    End If
  End If
  If (f_name1 = "") Then
    MsgBox "The Product Backlog file must be specified."
    Exit Sub
  End If

Set wb1 = Excel.Workbooks.Open(f_name1)
Set sht1 = wb1.Sheets("Product Backlog")

Set wb3 = ThisWorkbook
Set sht3 = wb3.Sheets("check")
With sht3
StartDate = sht3.Range("J3").Value
If IsDate(StartDate) = True Then
MsgBox ("The following string is a valid date expression")
Else
'if its not a date expression show a message box
MsgBox ("The following string is not a valid date expression")

End If

EndDate = sht3.Range("J4").Value

Debug.Print EndDate

End With

wb1.Activate
sht1.Activate
    sht1.Columns("O:O").Select
    wb1.Worksheets("Product Backlog").Sort.SortFields.Clear
    wb1.Worksheets("Product Backlog").Sort.SortFields.Add2 Key:=Range( _
        "O1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With wb1.Worksheets("Product Backlog").Sort
        .SetRange Range("O1:O3437")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

    End With
    'sht1.Columns("X:X").Select
    sht1.Range("$A$1:$X$3432").AutoFilter Field:=15, Criteria1:= _
        ">=StartDate", Operator:=xlAnd, Criteria2:="<=EndDate"

Я хочу отфильтровать столбец 15 (столбец даты) листа невыполненных работ по продукту. В текущей книге, где я занимаюсь кодированием, я взял две ячейки ( J3 , J4 ) в качестве даты начала и даты окончания. когда я нажимаю кнопку, он будет учитывать дату начала и дату окончания и go добавит в столбец 15 листа невыполненных работ по продукту и автоматически отфильтрует его с помощью >=StartDate", Operator:=xlAnd, Criteria2:="<=EndDate".

Эта команда не фильтрует столбец 15, а делает столбец пустой, я имею в виду, что он фильтрует все значение. Я не могу понять, в чем проблема с командой. Пожалуйста, пожалуйста, у кого-нибудь есть идея исправить это, добро пожаловать.

1 Ответ

0 голосов
/ 26 мая 2020

Даты в Excel фактически сохраняются как последовательные порядковые номера, а затем форматируются для отображения даты. 1 января 1900 года - это серийный номер 1.

Формат даты по умолчанию зависит от локали вашего компьютера, например, для США формат «м / д / гггг»: 26.05.2020. Если вы напишите 26.05.2020 в одной из ячеек, Excel автоматически распознает ее тип как дату, но сохранит фактическое двойное значение (число) 43977. Если вы измените форматирование ячейки на «Общее», вы действительно может видеть число.

Дополнительная информация MSDN .

Возвращаясь к вашему вопросу: вы не передаете фактическое значение переменной в AutoFilter. В Excel даты считаются числами, поэтому вы должны использовать значение Double фактической даты.

sht1.Range("$A$1:$X$3432").AutoFilter Field:=15, Criteria1:= _
        ">="&CDbl(StartDate), Operator:=xlAnd, Criteria2:="<="&CDbl(EndDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...