【发布时间】:2016-12-30 13:27:27
【问题描述】:
我希望有人可以提供帮助。我有一个由其他人创建的仪表板,其中跨表有许多表,所有表都从表 1 上的下拉日期选择(从 - 到)操作。我被要求添加到此,并创建了最适合的数据透视表工作。我遇到的问题是我需要它们根据表 1 上的下拉日期进行过滤。
我希望这可以通过 VBA 实现。
我已经能够让我的数据透视报告根据另一个基于文本的下拉列表进行过滤。但是无法获得相同的代码(当调整为专注于“月份”选项和相关的下拉单元格时)用于日期选择,我也无法弄清楚如何允许多项选择以便我可以选择日期范围。
我一直使用的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem
Dim strField As String
strField = "Region"
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
If Target.Address = Range("D2").Address Then
For Each ws In ThisWorkbook.Worksheets
For Each pt In ws.PivotTables
With pt.PageFields(strField)
For Each pi In .PivotItems
If pi.Value = Target.Value Then
.CurrentPage = Target.Value
Exit For
Else
.CurrentPage = "(All)"
End If
Next pi
End With
Next pt
Next ws
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
任何人都能够提供的任何帮助将不胜感激。我对 VBA 相当陌生,并尽我所能调整我在网上找到但正在苦苦挣扎的代码。
谢谢
已修改:我还尝试了在其他地方找到的用于选择日期范围的以下代码
Sub FilterPivotDates()
'
Dim dStart As Date
Dim dEnd As Date
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Application.ScreenUpdating = False
On Error Resume Next
dStart = Sheets("Pivots").Range("F2").Value
dEnd = Sheets("Pivots").Range("f3").Value
Set pt = ActiveSheet.PivotTable1
Set pf = pt.PivotFields("Month")
pt.ManualUpdate = True
pf.EnableMultiplePageItems = True
For Each pi In pf.PivotItems
pi.Visible = True
Next pi
For Each pi In pf.PivotItems
If pi.Value < dStart Or pi.Value > dEnd Then
pi.Visible = False
End If
Next pi
Application.ScreenUpdating = False
pt.ManualUpdate = False
Set pf = Nothing
Set pt = Nothing
End Sub
在示例中,我发现这是由按钮操作的,但我只是在工作表中尝试过。但这对我也不起作用。
【问题讨论】:
-
您的“月份”实际上是从日期中获取的,格式为
dd/mm/yyyy或类似的格式吗? -
是的,我的源数据将我的月份作为日期格式为 mmm yy,并且我的月份下拉选择是相同的。该代码在查找基于文本的信息时工作得非常好,但不会查找日期
-
请同时发布不起作用的代码。
标签: vba filtering pivot-table