Excel VBA - автофильтрация столбца даты по набору дат

Я все еще изучаю Excel VBA и был бы признателен, если бы кто-нибудь помог мне сделать это правильно. Я хочу отфильтровать столбец даты на основе startDate и endDate, которые я указал на листе с именем DateMaster. Когда я запускаю макрос, он выдает ошибку времени выполнения 13, дата начала = 0. Ниже приведен мой код.

Sub FIlterCopy()

Dim StartDate As Long
Dim EndDate As Long

StartDate = ThisWorkbook.Worksheets("DateMaster").Range("C2").Value
EndDate = ThisWorkbook.Worksheets("DateMaster").Range("D2").Value

Application.ScreenUpdating = False

ThisWorkbook.Worksheets("FilterMaster").Activate

Range("A:BA").Select

Selection.ClearContents

Application.Workbooks.Open ("C:\WRI\Data\Revenue Update.xls")

Windows("Revenue Update.xls").Activate

Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:= _
"=Backlog", Operator:=xlOr, Criteria2:="=RMA"
Selection.AutoFilter Field:=29, Criteria1:= _
"=Direct"
Selection.AutoFilter Field:=20, Criteria1:=">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate

Application.ScreenUpdating = True

End Sub

person ASE Dev    schedule 29.03.2016    source источник
comment
Вы пробовали выполнить код с помощью F8? Кроме того, я бы не стал выбирать и активировать в вашем коде. В этом сообщении объясняется, как это сделать. Вы получаете эту ошибку, потому что это несоответствие типов.   -  person Dan    schedule 29.03.2016
comment
(1) Если вы хотите сохранить дату в переменной, вы можете сохранить ее как таковую: Dim StartDate As Date. (2) Сообщение об ошибке довольно очевидно. Почему бы вам не проверить, действительно ли ячейка C2 содержит действительную дату. (3) Даже если есть дата, которую вы можете подтвердить, добавив: If IsDate(ThisWorkbook.Worksheets("DateMaster").Range("C2").Value) Then непосредственно перед назначением даты и Debug.Print StartDate сразу после назначения переменной.   -  person Ralph    schedule 29.03.2016
comment
Dim Start as Date работал, а не строка. Спасибо ребята!!!   -  person ASE Dev    schedule 29.03.2016


Ответы (1)


Если вы установите StartDate и EndDate как Long, вы должны использовать команду CDate в автофильтре

Selection.AutoFilter Field:=20, Criteria1:=">=" & CDate(StartDate), Operator:=xlAnd, Criteria2:="<=" & CDate(EndDate)

В противном случае определите обе переменные как Date.

person Diego Ribba    schedule 08.02.2017