运行时错误1004:无法获取工作表类的数据透视表属性

时间:2019-01-15 07:39:30

标签: excel vba

我是Excel VBA的新手,我正尝试仅使用具有以下代码的行字段来创建数据透视表,但遇到错误1004,需要调试帮助。

我已经在注释之后指出了代码上的错误发生 // '上面的宏创建了一个数据透视表缓存和地址以插入新的数据透视表 // 以便于参考。

对此表示感谢。

Sub getpivotUI2()    
    '**strong text**    
    ' getpivotUI2 Macro    
    ' Create PivotTable from Task_Sheet to filter duplicate bill (UI2)    
    '

    Dim P2Sheet, TSheet As Worksheet    
    Dim P2Cache As PivotCache    
    Dim P2Table As PivotTable    
    Dim P2Range As Range    
    Dim L2Row, L2Col As Long   

    ' Declaring the variables above

    Set TSheet = Worksheets("Task_Sheet")    
    Set P2Sheet = Worksheets("pivot_UI2")   

    L2Row = TSheet.Cells(Rows.Count, 1).End(xlUp).Row    
    L2Col = TSheet.Cells(4, Columns.Count).End(xlToLeft).Column

    Set P2Range = TSheet.Cells(4, 1).Resize(L2Row, L2Col)

    'Macros above determine where the cursor is referenced

    P2Sheet.Cells.Delete 'Removing all previous data the pivotTable worksheet
    Set P2Cache = ActiveWorkbook.PivotCaches.Create _    
      (SourceType:=xlDatabase, SourceData:=P2Range)

    Set P2Table = P2Cache.CreatePivotTable _    
      (TableDestination:=P2Sheet.Cells(3, 1), TableName:="PivotTableUI2")

    'Macros above create a pivot cache and address to insert the new pivot table     

    With ActiveSheet.PivotTables("PivotTableUI2").PivotFields("UI2") '**<-- ERROR OCCURANCE**   
        .Orientation = xlRowField
        .Position = 1
    End With           

    With ActiveSheet.PivotTables("PivotTableUI2").PivotTables("PivotTableUI2").PivotFields("Count_UI2")
        .Orientation = xlDataField
        .Function = xlCount
        .Name = "Count of UI2"
    End With

    With ActiveSheet.PivotTables("PivotTableUI2").PivotTables("PivotTableUI2").PivotFields("R Patient" & Chr(10) & "Count")
        .Orientation = xlDataField
        .Function = xlCount
        .Name = "Count of R Patient"
    End With

    With ActiveSheet.PivotTables("PivotTableUI2").PivotTables("PivotTableUI2").PivotFields("PR Patient" & Chr(10) & "Count")
        .Orientation = xlDataField
        .Function = xlCount
        .Name = "Count of PR Patient"
    End With

    'Macros above inserts a row field and data field in the pivot table
End Sub

1 个答案:

答案 0 :(得分:0)

尝试以下代码,在代码注释中进行解释

Option Explicit

Sub getpivotUI2()

    ' getpivotUI2 Macro
    ' Create PivotTable from Task_Sheet to filter duplicate bill (UI2)

    Dim P2Sheet As Worksheet, TSheet As Worksheet
    Dim P2Cache As PivotCache
    Dim P2Table As PivotTable
    Dim P2Range As Range
    Dim L2Row As Long, L2Col As Long

    ' Declaring the variables above

    Set TSheet = ThisWorkbook.Worksheets("Task_Sheet")
    Set P2Sheet = ThisWorkbook.Worksheets("pivot_UI2")

    With TSheet
        L2Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        L2Col = .Cells(4, .Columns.Count).End(xlToLeft).Column

        Set P2Range = .Range(.Cells(4, 1), .Cells(L2Row, L2Col)) ' set the data source of the Pivot-Cache
    End With

    'Macros above determine where the cursor is referenced

    P2Sheet.Cells.Delete 'Removing all previous data the pivotTable worksheet

    ' set the Pivot-Cache object
    Set P2Cache = ActiveWorkbook.PivotCaches.Add(xlDatabase, P2Range.Address(0, 0, xlA1, xlExternal))

    ' set the Pivot-Table object
    Set P2Table = P2Sheet.PivotTables.Add(PivotCache:=P2Cache, TableDestination:=P2Sheet.Range("A3"), TableName:="PivotTableUI2")

    'Macros above create a pivot cache and address to insert the new pivot table

    ' ~~~ For Debug Only ~~~
    Dim PTFld As PivotField

    For Each PTFld In P2Table.PivotFields
        Debug.Print PTFld.Name
    Next PTFld

    With P2Table.PivotFields("UI2")
        .Orientation = xlRowField
        .Position = 1
    End With

    ' rest of your Pivot-Fields code …

End Sub

我在上面的Sub中添加了一个部分,以确保您的数据透视表具有字段“ U12 ”。

运行此部分时:

' ~~~ For Debug Only ~~~
Dim PTFld As PivotField

For Each PTFld In P2Table.PivotFields
    Debug.Print PTFld.Name
Next PTFld

您应该在立即窗口中获得以下值:

enter image description here