我有几个pivotfields,我想在某些条件下标记字段的pivotitems。我尝试过使用.visible
并使用了此application.screenupdating
和application.displayfilters
。但是不能选择或取消激活枢轴。我非常感谢每一个回复。
Filter_PivotField_by_Date_Range
。这是我在我的主要调用的函数,只是为了给我的字段名称和我要比较的日期。
在2 if条件之后,我希望它标记(选择/勾选)字段中的pivotitems,否则取消标记/不选择其他的。让另一个看不见,然后只退出Sub。
如果你们有任何问题我真的会帮助你们清楚。如有任何意见或建议,我们将不胜感激。
Sub Filter_PivotField_by_Date_Range(pvtField As PivotField, it1 As Date, it2 As Date)
Dim bTemp As Boolean, i As Long
Dim dtTemp As Date, dtTemp1 As Date
dtTemp = Format(CDate(it1), "dd/mm/yyyy")
dtTemp1 = Format(CDate(it2), "dd/mm/yyyy")
On Error Resume Next
With pvtField
For i = 1 To .PivotItems.Count
dtFrom = .PivotItems(i)
If (dtTemp <= dtFrom) Then
If (dtTemp1 >= dtFrom) Then
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
.PivotItems(i).Visible = True
MsgBox (dtFrom)
Else
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
End If
End If
Next i
End With
End Sub
答案 0 :(得分:0)
我尝试过一些小修改代码。它对我来说很完美。我也有这个假设,你的&#39; it1&#39;是开始日期和&#39; it2&#39;是结束日期。
dtFrom = Format(CDate(.PivotItems(i)), "dd/mm/yyyy")
将日期范围值存储到数组。
it1 = "01/01/2013"
it2 = "01/01/2014"
Dim dtTemp1 As Date
Dim dtTemp2 As Date
Dim dateArray()
dtTemp1 = Format(CDate(it1), "dd/mm/yyyy")
dtTemp2 = Format(CDate(it2), "dd/mm/yyyy")
NoOfDays = DateDiff("D", dtTemp1, dtTemp2)
ReDim dateArray(NoOfDays)
For i = 0 To NoOfDays
dateArray(i) = dtTemp1 + i
Next
答案 1 :(得分:0)
我尝试了下面的一个并且它的工作正常,如果可能的话,可以分享你的相同日期。
Option Explicit
Sub Macro7()
Dim StartDate As Date
Dim EndDate As Date
Dim pvtDATE As Date
Dim pvtField As PivotField
Dim x As PivotItem
Dim it1
Dim it2
Dim y
it1 = "2/2/2016"
it2 = "2/20/2016"
Set pvtField = Excel.Sheets("UrSheet").PivotTables("PivotTable3").PivotFields(2)
StartDate = Format(CDate(it1), "dd/mm/yyyy")
EndDate = Format(CDate(it2), "dd/mm/yyyy")
For Each x In pvtField.PivotItems
If (x.Value <> "(blank)") Then
pvtDATE = Format(x.Value, "dd/mm/yyyy")
If (StartDate <= pvtDATE) Then
If (EndDate >= pvtDATE) Then
x.Visible = True
Else
x.Visible = False
End If
Else
x.Visible = False
End If
End If
Next
End Sub
答案 2 :(得分:0)
如果你有Excel 2010或更高版本并且这些数据透视表共享相同的数据透视表(即它们具有相同的数据源),那么你可以简单地设置一个切片器,然后将其连接到其他数据透视表。然后,您在其中所做的任何更改都将自动反映在其他更改中。(右键单击切片器并选择报告连接)。
关于您的代码失败的原因,您能否告知您正在使用的Excel版本以及PivotField的数字格式是什么?我怀疑代码是由于Excel中的错误导致代码失败,如果您使用Excel 2007或2010并且使用非美国区域日期设置并且数据透视图的数字格式设置为常规,则在识别日期变量时VBA会失败。 (如果源数据中有空格,数字格式将停留在General上。您需要摆脱这些空白。)
我wrote about this here
除了更改字段的数字格式之外,如果您使用的是Excel 2010,还可以从评论中try Micheal's approach。
我认为这也是一个可能的解决方案at this SO thread。
有关详情,请参阅以下链接:
Why is this PivotItem.Visible call throwing a TypeMismatch error? https://social.msdn.microsoft.com/Forums/office/en-US/01cb61c7-5e68-4a45-aeff-a70c6dbfe00f/excel-2007-accessing-pivotitemvisible-gives-error-if-the-field-item-value-is-a-date