Полученные данные не в пределах выбранных дат - PullRequest
1 голос
/ 11 января 2020

Я пытаюсь извлечь данные на основе диапазона дат, но фильтр неправильно распознает значения даты начала / окончания. Результаты ошибочны c или вообще не получены.

Sub CopyDataBasedOnDate()

Dim StartDate As Date
Dim EndDate As Date
Dim MainWorksheet As Worksheet

StartDate = Worksheets("Macro").Range("j8").Value
  EndDate = Worksheets("Macro").Range("j9").Value

Set MainWorksheet = Worksheets("RawData")

MainWorksheet.Activate

Range("a4").CurrentRegion.Sort _
      key1:=Range("a4"), order1:=xlAscending, _
       Header:=x1Yes

Range("a4").CurrentRegion.AutoFilter Field:=1, _
    Criteria1:=">=" & StartDate, Operator:=xlAnd, _
    Criteria2:="<=" & EndDate

ActiveSheet.AutoFilter.Range.Copy

Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Paste Destination:=Range("A5")
Selection.Columns.AutoFit
Call SumCell
Range("a1").Select
MainWorksheet.Activate
Selection.AutoFilter
End Sub

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Excel интерпретирует дату как длинную переменную. Если ваш формат данных не совпадает с (En) форматом данных по умолчанию, у вас могут быть проблемы с соответствием. Так что используйте Clng (Ваша дата). Попробуйте пожалуйста следующий код. Это касается только фильтрующей части:

Sub CopyDataBasedOnDate()
 Dim StartDate As Date
 Dim EndDate As Date
 Dim MainWorksheet As Worksheet

  StartDate = Worksheets("Macro").Range("j8").Value
  EndDate = Worksheets("Macro").Range("j9").Value

 Set MainWorksheet = Worksheets("RawData")

 MainWorksheet.Range("a4").CurrentRegion.Sort _
      key1:=MainWorksheet.Range("a4"), order1:=xlAscending, _
       Header:=xlYes

 MainWorksheet.Range("a4").CurrentRegion.AutoFilter field:=1, _
    Criteria1:=">=" & CLng(StartDate), Operator:=xlAnd, _
    Criteria2:="<=" & CLng(EndDate), Operator:=xlFilterValues
End Sub
0 голосов
/ 11 января 2020

Если вы явно не используете Range() ... .Criteria: ..., cezarypiatek ответ в Получить все даты между 2 датами в vba - это решение, если вы хотите использовать Range() ... .Criteria: ... решение в Фильтрация между две даты в Excel vba

Так что в основном конвертируем StartDate и EndDate в удвоенные значения, используя CDbl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...