【问题标题】:Replacing Pivot Table with Values to Filter and Delete Rows用值替换数据透视表以过滤和删除行
【发布时间】:2019-12-03 20:54:51
【问题描述】:

我正在尝试围绕来自数据透视表的一些数据构建电子表格,但我无法过滤和删除行。

我已经为表格尝试了.Value = .Value,但我收到了错误消息

“我们无法对选定的单元格进行此更改,因为它会影响数据透视表...”(运行时错误“1004”)

    With ws
        FinalRow = .Cells(Cells.Rows.Count, "B").End(xlUp).Row
        With .Range("B1:C" & FinalRow)'Pivot table range
            .Value = .Value
        End With

        For iCntr = FinalRow To 1 Step -1
            If Rows(iCntr).Hidden Then
                Rows(iCntr).EntireRow.Delete
            End If
        Next iCntr
    End With
End With

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    我不认为你可以只是.Value 那样的范围。您需要删除枢轴 - 可能通过存储数据、清除范围然后重新写入数据。

    试试这个:

    Dim tmp As Variant
    With ws
        FinalRow = .Cells(Cells.Rows.Count, "B").End(xlUp).Row
        With .Range("B1:C" & FinalRow) 'Pivot table range
            tmp = .Value
            .ClearContents
            .Value = tmp
        End With
    End With
    

    顺便说一句,如果您“隐藏”了数据透视表中的项目,它们会从表格中删除,而不是真正隐藏 - 所以我怀疑以后不需要删除..

    【讨论】:

    • 所以.ClearContents 行不起作用(给我与上述相同的错误)。尝试一起删除数据透视表,我遇到了同样的问题:.Range(Pt.TableRange2.Address).Delete Shift:=xlUp
    • 那么您的范围"B1:C" & FinalRow 没有覆盖整个数据透视表..?也许您在 C 列的底部有一个总数,而 B 中的旁边没有任何内容?或者它不仅仅跨越 B 和 C 列?
    • 在我看来是这样 - 数据透视表实际上从 B2 开始,但在范围内。我的delete 行也在with.range 之外,所以它应该完全覆盖整个范围
    • 您可以检查FinalRow 的值 - 以确保它到达表格的底部。您也可以只尝试Range("B:C").ClearContents - 如果这不起作用,则必须在这两列之外有部分枢轴。
    • 刚刚为整个 ws 输入了 .Cells.ClearContents,但不幸的是,我仍然遇到数据透视表错误
    猜你喜欢
    • 2016-07-08
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多