簡體   English   中英

VBA:從1個工作表中的多個數據透視表創建多個數據透視圖[錯誤:對象'_chart'的方法'SetSourceData'失敗]

[英]VBA: Create multiple pivot charts from multiple pivot tables in 1 sheet [Error: Method 'SetSourceData' of object '_chart' failed]

首先,我將4個數據透視表創建到名為OOTWeeklyTrendperPlatform,OOTWeeklyTrendperFailureMode,TotalWeeklyTrendperDereel,TotalWeeklyTrendperEngDataValue的1個工作表中。 這些部分已成功完成。

之后,我要從這4個數據透視表中的每一個創建數據透視表 因此,在1個工作表中有4個數據透視表和4個數據透視圖。

我的工作順序是這樣的(表和圖表名稱僅供說明),依次為table1然后chart1然后table2然后chart2,依此類推。 問題是在完成表1,表1和表2之后; 生成chart2時出現錯誤(或第二張圖表對應於table2)。 請在下面找到縮短的代碼。

Sub MakePivotTableDereel()
    Dim PTCache As PivotCache, PTCache1 As PivotCache
    Dim PT As PivotTable, PT1 As PivotTable, PT2 As PivotTable, PT3 As PivotTable

    Dim rngChart As Range, rngChart1 As Range, rngChart2 As Range, rngChart3 As Range
    Dim objChart As ChartObject, objChart1 As ChartObject, objChart2 As ChartObject, objChart3 As ChartObject

    Dim PivotDereel As Worksheet
    Application.ScreenUpdating = False

'   Delete PivotSheet if it exists
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("PivotDereel").Delete
    On Error GoTo 0

'   Create Pivot Cache
    Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets("Data").Range("A1").CurrentRegion.Address)

'   Add PivotDereel sheet
    Set PivotDereel = Worksheets.Add
    ActiveSheet.Name = "PivotDereel"
    Cells(1, 1).Value = "OOT Weekly Trend per Platform"
    Cells(1, 1).Font.Size = 16
    Cells(1, 15).Value = "OOT Weekly Trend per Failure Mode"
    Cells(1, 15).Font.Size = 16
    Cells(1, 29).Value = "Overall Weekly Trend per Dereel"
    Cells(1, 29).Font.Size = 16
    Cells(1, 39).Value = "Overall Weekly Trend per Eng Data Value"
    Cells(1, 39).Font.Size = 16

'   Create pivot table OOTWeeklyTrendperPlatform
    Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, TableDestination:=PivotDereel.Cells(4, 1), TableName:="OOTWeeklyTrendperPlatform")
    ' set table properties below
    With PT
        .PivotFields("Work Week").Orientation = xlRowField
        .PivotFields("PLATFORM").Orientation = xlColumnField
        .PivotFields("EngDataValue").Orientation = xlPageField
        .PivotFields("LotID").Orientation = xlDataField
        .DisplayFieldCaptions = False
        .TableStyle2 = "PivotStyleMedium2"
        .PivotFields("Count of LotID").Caption = "Lot ID"
    End With
    ' Filter unwanted data below
    PT.PivotFields("EngDataValue").CurrentPage = "(All)"
    With PT.PivotFields("EngDataValue")
        .PivotItems("BROKEN SEAL").Visible = False
        '.PivotItems("DAMAGED MATERIAL").Visible = False
        .PivotItems("COGHOLE DAMAGE").Visible = False
        '.PivotItems("DEBRIS IN TAPE").Visible = False
        .PivotItems("DRIFTED COVER TAPE").Visible = False
        '.PivotItems("DROPPED REEL").Visible = False
        .PivotItems("EMPTY POCKET").Visible = False
        '.PivotItems("ENGINEERING REQUEST").Visible = False
        .PivotItems("LOOSE COVER TAPE").Visible = False
        .PivotItems("MACHINE COUNT ERROR").Visible = False
        .PivotItems("MACHINE LOCKED UP").Visible = False
        .PivotItems("OUT OF MATERIALS").Visible = False
        .PivotItems("OUT OF PURGE TIME").Visible = False
        '.PivotItems("OVER/UNDER SEALED").Visible = False
        .PivotItems("PART OUT OF POCKET").Visible = False
        '.PivotItems("PO ERROR").Visible = False
        .PivotItems("TECH PURGED SYSTEM").Visible = False
        .PivotItems("THICK/THIN SEAL").Visible = False
    End With
    PT.PivotFields("EngDataValue").EnableMultiplePageItems = True

'   Create pivot chart OOTWeeklyTrendperPlatform
    Debug.Print PT.TableRange2.Columns.Count
    'Use the ChartObjects.Add Method to add an embedded Pivot Chart, which is represented as a ChartObject object. Note that the arguments Left and Width are mandatory to specify in this method. This method allows you to set the position and size (both in points) of the chart.
    Set objChart = Sheets("PivotDereel").ChartObjects.Add(Left:=10, Top:=25 * (PT.TableRange2.Rows.Count), Width:=300, Height:=200)
    'set data source range for the Chart:
    Set rngChart = PT.TableRange2
    With objChart.Chart
    .SetSourceData Source:=rngChart
    End With

    With objChart.Chart
        .HasTitle = True
        .ChartTitle.Characters.Text = "OOT Weekly Trend per Platform"
        .ChartTitle.Font.Bold = True
        .ChartTitle.Font.Size = 14
    End With

'   Create pivot table OOTWeeklyTrendperFailureMode
    Set PT1 = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, TableDestination:=PivotDereel.Cells(4, 15), TableName:="OOTWeeklyTrendperFailureMode")
    With PT1
        .PivotFields("Work Week").Orientation = xlRowField
        .PivotFields("Failure Mode").Orientation = xlColumnField
        .PivotFields("EngDataValue").Orientation = xlPageField
        .PivotFields("LotID").Orientation = xlDataField
        .DisplayFieldCaptions = False
        .TableStyle2 = "PivotStyleMedium2"
        .PivotFields("Count of LotID").Caption = "Lot ID"
    End With
    PT1.PivotFields("EngDataValue").CurrentPage = "(All)"
    With PT1.PivotFields("EngDataValue")
        .PivotItems("BROKEN SEAL").Visible = False
        '.PivotItems("DAMAGED MATERIAL").Visible = False
        .PivotItems("COGHOLE DAMAGE").Visible = False
        '.PivotItems("DEBRIS IN TAPE").Visible = False
        .PivotItems("DRIFTED COVER TAPE").Visible = False
        '.PivotItems("DROPPED REEL").Visible = False
        .PivotItems("EMPTY POCKET").Visible = False
        '.PivotItems("ENGINEERING REQUEST").Visible = False
        .PivotItems("LOOSE COVER TAPE").Visible = False
        .PivotItems("MACHINE COUNT ERROR").Visible = False
        .PivotItems("MACHINE LOCKED UP").Visible = False
        .PivotItems("OUT OF MATERIALS").Visible = False
        .PivotItems("OUT OF PURGE TIME").Visible = False
        '.PivotItems("OVER/UNDER SEALED").Visible = False
        .PivotItems("PART OUT OF POCKET").Visible = False
        '.PivotItems("PO ERROR").Visible = False
        .PivotItems("TECH PURGED SYSTEM").Visible = False
        .PivotItems("THICK/THIN SEAL").Visible = False
    End With
    PT1.PivotFields("EngDataValue").EnableMultiplePageItems = True

'   Create pivot chart OOTWeeklyTrendperFailureMode

    'Use the ChartObjects.Add Method to add an embedded Pivot Chart, which is represented as a ChartObject object. Note that the arguments Left and Width are mandatory to specify in this method. This method allows you to set the position and size (both in points) of the chart.
    Set objChart1 = Sheets("PivotDereel").ChartObjects.Add(Left:=10, Top:=25 * (PT1.TableRange2.Rows.Count), Width:=300, Height:=200)
    'set data source range for the Chart:
    Set rngChart1 = PT1.TableRange2

    With objChart1.Chart
    .SetSourceData Source:=rngChart1
    End With

    With objChart.Chart
        .HasTitle = True
        .ChartTitle.Characters.Text = "OOT Weekly Trend per Platform"
        .ChartTitle.Font.Bold = True
        .ChartTitle.Font.Size = 14
    End With
'below is the portion to create 3rd and 4th pivot tables and charts
end sub

我收到錯誤消息:對象“ _chart”的方法“ SetSourceData”部分失敗

With objChart1.Chart
        .SetSourceData Source:=rngChart1
        End With

本部分假定為第二張圖表分配源數據。 但是失敗了。 你有解決方案嗎?

如果選擇了數據透視表中的任何單元格,則插入的圖表將自動使用整個數據透視表作為其源數據。 我只是在帶有幾個數據透視表的工作表上運行此命令:

for i=1 to 4
  activesheet.pivottables(i).tablerange2.cells(1,1).select
  ActiveSheet.Shapes.AddChart
  ' here you need to specify chart type and style, size and position, etc.
next

不需要SetSourceData(在我如上所述簡化之前,這給了我意外的問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM