运行时错误1004-无法获取PivotTable类的PageRange属性

时间:2019-08-27 13:51:42

标签: excel vba range pivot-table

将代码应用于没有PageRange属性的数据透视表时,代码将失败,并出现标题错误

我尝试将布尔变量应用于

sh.PivotTables(i).PageRange

但是那也不起作用

 Sub TestPivotPaste2()

    Dim wb As Workbook
    Dim sh As Worksheet
    Set wb = ActiveWorkbook

    Set sh = wb.Worksheets(7)
    c = sh.PivotTables.Count

    If c > 0 Then

        For i = 1 To c
            If Not sh.PivotTables(i).PageRange.Count = 0 Then
                Debug.Print c
            Else
                GoTo nextpiv
            End If
            nextpiv:
        Next i
    Else
    MsgBox ("NoPivot")
    End If

   End Sub

预期结果是能够辨别PageRange属性为true或false的数据透视表,但仅在范围存在时才起作用。

1 个答案:

答案 0 :(得分:0)

尝试此功能

Function pageRangeExists(pt as PivotTable) as Boolean

    Dim test as Range
    On Error Resume Next
    Set test = pt.PageRange
    On Error Go To 0

    pageRangeExists = Not test Is Nothing

End Function

由于PageRange是范围对象,因此您必须先测试该范围是否存在或有效,因为尝试对不存在的范围进行操作会产生错误。

因此,您的for loop可以简化

   For i = 1 To c
       If pageRangeExists(sh.PivotTables(i)) Then
           Debug.Print c
       End If
   Next i

GoTo语句是多余的,因为它已经嵌入在for loop中。