Excel 从可旋转组中删除空格

Excel 从可旋转组中删除空格,excel,vba,pivot-table,Excel,Vba,Pivot Table,我有一个Excel数据集,该数据集以按月份分组的行标签为轴心,行标签是日期 我有VBA设置来做透视,然后将行标签分组为月份 在分组到几个月之后,我试图在下拉菜单中获得空白字段以取消选择。< /P> 我试着录制一个宏;它就像一样,我想如果你打开宏录制器,用鼠标点击步骤,你就能得到答案。试试看它是否能满足你的需求 我的解决方案可能不是最优雅的,但您必须将透视项的可见值更改为TRUE。然后刷新数据透视,以防自动工作簿计算被关闭,然后您可以自由地将可见值更改为FALSE: With ActiveShee

我有一个Excel数据集,该数据集以按月份分组的行标签为轴心,行标签是日期

我有VBA设置来做透视,然后将行标签分组为月份

在分组到几个月之后,我试图在下拉菜单中获得空白字段以取消选择。< /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