Excel宏。在日期之间搜索。不正常工作?

时间:2018-03-10 16:02:14

标签: excel vba excel-vba

我首先说明目标,然后是我采取的步骤,问题,最后是我的问题。

目标: 在2017年1月至2017年12月的两个日期中搜索表格

Screenshot of the sheet

步骤:

  • 在红色三角形框中,nr。 1,我输入日期,日期是欧盟格式
  • 在本例中,我将于2017年10月5日至2017年11月6日期间搜索
  • 然后我按下搜索,分配了一个宏(我将它贴在下面)

问题:

  • 在红色三角形框中,nr。 2,你可以看到搜索中出现的内容
  • 在这种情况下,2017年5月和2017年6月出现
  • 我怀疑的原因是,我的搜索字词2017年10月5日被视为第5个月,可能和11月6日被视为第6个月,6月,

问题:

  • 我如何获得表格/宏来显示2017年10月5日至2017年11月6日之间的结果,而不是2017年5月至2017年6月之间的结果?

用于搜索按钮的宏:

ActiveSheet.PivotTables("PivotTable2").PivotFields("Months").ClearAllFilters
Application.CutCopyMode = False
ActiveSheet.PivotTables("PivotTable2").PivotFields("Factuurdatum:"). _
    PivotFilters.Add2 Type:=xlDateBetween, Value1:=ActiveSheet.Range("E3").Value, Value2:=ActiveSheet.Range("F3").Value

2 个答案:

答案 0 :(得分:0)

尝试以下测试

Sub test()
  Dim startDate As String
  Dim endDate As String

  startDate = Format$(ActiveSheet.Range("E3"), "dd-mmm-yy")
  endDate = Format$(ActiveSheet.Range("F3"), "dd-mmm-yy")

  With ActiveSheet.PivotTables("PivotTable2").PivotFields("Factuurdatum:").PivotFilters
        Do While .count > 0
            .Item(1).Delete
        Loop
        .Add Type:=xlDateBetween, Value1:=startDate, Value2:=endDate
    End With

End Sub

参考:

https://social.msdn.microsoft.com/Forums/office/en-US/19f6838e-1f0f-480f-8cba-682a1c84ce1b/vba-pivot-table-filter-between-two-dates?forum=exceldev

答案 1 :(得分:0)

我的一位朋友找到了解决方法:

Excel将宏中的日期视为欧洲日期,但似乎它在过滤函数中使用美国日期(这就是Excel转换它的原因)。

对于解决方法,您可以将日期写为:2017年5月10日,或者,如果您想使用正常(欧洲)日期,那么我们可以使用下面的宏:

ActiveSheet.PivotTables("PivotTable2").PivotFields("Months").ClearAllFilters

ActiveSheet.PivotTables("PivotTable2").PivotFields("Factuurdatum:"). _

    PivotFilters.Add Type:=xlDateBetween, Value1:=Replace(ActiveSheet.Range("E4").Value, "-", "/"), Value2:= _

    Replace(ActiveSheet.Range("F4").Value, "-", "/")

在这个宏中使用了Replace()函数,在这个例子中,这个函数将' - '替换为'/',因此它成为我们想要的日期。