Excel 从可旋转组中删除空格
我有一个Excel数据集,该数据集以按月份分组的行标签为轴心,行标签是日期 我有VBA设置来做透视,然后将行标签分组为月份Excel 从可旋转组中删除空格,excel,vba,pivot-table,Excel,Vba,Pivot Table,我有一个Excel数据集,该数据集以按月份分组的行标签为轴心,行标签是日期 我有VBA设置来做透视,然后将行标签分组为月份 在分组到几个月之后,我试图在下拉菜单中获得空白字段以取消选择。< /P> 我试着录制一个宏;它就像一样,我想如果你打开宏录制器,用鼠标点击步骤,你就能得到答案。试试看它是否能满足你的需求 我的解决方案可能不是最优雅的,但您必须将透视项的可见值更改为TRUE。然后刷新数据透视,以防自动工作簿计算被关闭,然后您可以自由地将可见值更改为FALSE: With ActiveShee
在分组到几个月之后,我试图在下拉菜单中获得空白字段以取消选择。< /P>
我试着录制一个宏;它就像一样,我想如果你打开宏录制器,用鼠标点击步骤,你就能得到答案。试试看它是否能满足你的需求 我的解决方案可能不是最优雅的,但您必须将透视项的可见值更改为TRUE。然后刷新数据透视,以防自动工作簿计算被关闭,然后您可以自由地将可见值更改为FALSE:
With ActiveSheet.PivotTables("PivotTable1")
.PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = True
.RefreshTable
.PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = False
End With
我还有一个更不优雅的替代解决方案:您可以使用日期过滤器从数据透视中删除空白值:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlAfter, Value1:="1901-01-01"
如果您有一个字符串/数字表,也可以使用标签过滤器:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlCaptionIsGreaterThan, Value1:="0"
<>希望有帮助。如果你仍然想计算空白值,你可能想试试这个代码:
Dim p_i As PivotItem
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotItems("(blank)").Visible = True
For Each p_i In .PivotItems
If p_i.Name = "(blank)" Then
p_i.NumberFormat = ";;;"
End If
Next
End With
如果删除此行。PivotItemsblank.Visible=True是否有效?这不起作用。我最终决定在透视之前对数据进行预格式化,只删除包含空白数据的行。这样就不会创建空白,因为我只是过滤掉它们。我仍然想看看是否有人知道为什么这不起作用。我只是按原样测试了这段代码,无法重现问题。然后,我从数据中删除了所有空行,并再次对其进行测试,结果在.PivotItemsblank.Visible=True行失败,但在For循环中没有失败。我希望这个测试能对你有所帮助。我最终解决了我的问题,只是删除了所有会产生空白的项目。除了这真的不能回答我原来的问题,所以我会把它留着。我没有这个。这就是我得到上述代码的原因。录音机让我失望了,它不能满足我的需要。谢谢你。
Dim p_i As PivotItem
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotItems("(blank)").Visible = True
For Each p_i In .PivotItems
If p_i.Name = "(blank)" Then
p_i.NumberFormat = ";;;"
End If
Next
End With
On Error Resume Next
Dim ip As Long
Dim it As Long
For ip = 1 To ActiveSheet.PivotTables.Count
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables(ip)
pt.PivotCache.Refresh
pt.ClearAllFilters
pt.RefreshTable
Dim pf As PivotField
For it = 1 To pt.PivotFields.Count
Set pf = pt.PivotFields(it)
Dim pi As PivotItem
For Each pi In pf.PivotItems
If pi.Name = "(blank)" Or pi.Name = "#N/A" Then
pi.Visible = False
End If
Next pi
Next it
Next ip