【问题标题】:Generating Pivot for the last updated row为最后更新的行生成 Pivot
【发布时间】:2018-03-30 00:24:23
【问题描述】:

我有两张床单。 Sheet1“结果”有一个包含 8 列的表。

我有第二张表“Sum”,我在其中为 Reuslt 表生成数据透视表。

代码运行良好,但它计算每一列的总和并给出结果。

我想只为最后更新的行提供数据透视表。

每周最后一次更新行都会更改。下周,17号等更新……

谁能建议我怎么做?任何线索都会有所帮助

Sub sum2017()
Dim ws9 As Worksheet
Dim pc9 As PivotCache
Dim pt9 As PivotTable
Dim ct9 As Integer
Set ws9 = Sheets("Sum")
Set pc9 = ActiveWorkbook.PivotCaches.Create(xlDatabase, "'Result'!R1C1:R1048576C6")
Set pt9 = pc9.CreatePivotTable(ws9.Range("A3"))
pt9.AddDataField pt9.PivotFields("NOK"), "Sum of NOK", xlSum
pt9.AddDataField pt9.PivotFields("OK"), "Sum of OK", xlSum
pt9.AddDataField pt9.PivotFields("Total"), "Sum of Total", xlSum
pt9.AddDataField pt9.PivotFields("NOK %"), "Sum of NOK %", xlSum
pt9.AddDataField pt9.PivotFields("OK %"), "Sum of OK %", xlSum
pt9.DataLabelRange.HorizontalAlignment = xlCenter
pt9.DataLabelRange.ReadingOrder = xlContext
pt9.TableRange2.HorizontalAlignment = xlCenter
End Sub

【问题讨论】:

  • 将此代码粘贴到该工作表中单元格的更改事件中。
  • 仅从数据的最后一行创建PivotCache SoureData
  • 哪个代码? @nishitdey
  • @ShaiRado 但这不会是一个临时解决方案。下周,该行将更改..
  • 你写的上面的代码,就可以了

标签: vba excel


【解决方案1】:

此代码有效,但每次创建新数据透视表时都会添加帮助表。如果您不想这样做,只需添加一些额外的工作表,根据需要命名,然后将 wskHelpSheet 的引用更改为该工作表,并记住始终在宏开始时清理此工作表。我希望你听起来很清楚:)

    Sub sum2017()

Dim ws9 As Worksheet
Dim wskResult As Worksheet
Dim pc9 As PivotCache
Dim pt9 As PivotTable
Dim ct9 As Integer
Dim rngPivotRangeHeaders As Range
Dim lngLRow As Long
Dim lngLCol As Long
Dim rngPivotRangeRecords As Range
Dim rngPTRange As Range
Dim wskHelpSheet As Worksheet

    Set ws9 = Sheets("Sum")
    Set wskResult = ThisWorkbook.Sheets("Result")
    Set wskHelpSheet = Worksheets.Add
    With wskResult
        lngLRow = .Cells(Rows.Count, "B").End(xlUp).Row
        lngLCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        Set rngPivotRangeHeaders = .Range(.Cells(1, 1), .Cells(1, lngLCol))
        Set rngPivotRangeRecords = .Range(.Cells(lngLRow, 1), .Cells(lngLRow, lngLCol))
        Set rngPTRange = Union(rngPivotRangeHeaders, rngPivotRangeRecords)
        rngPTRange.Copy
    End With

    With wskHelpSheet
        .Range("a1").PasteSpecial Paste:=xlPasteValues
        lngLRow = .Cells(Rows.Count, "B").End(xlUp).Row
        lngLCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        Set rngPTRange = .Range(.Cells(1, 1), .Cells(lngLRow, lngLCol))
    End With

    Set pc9 = ActiveWorkbook.PivotCaches.Create(xlDatabase, rngPTRange)
    Set pt9 = pc9.CreatePivotTable(ws9.Range("A3"))

    With pt9
        .AddDataField .PivotFields("NOK"), "Sum of NOK", xlSum
        .AddDataField .PivotFields("OK"), "Sum of OK", xlSum
        .AddDataField .PivotFields("Total"), "Sum of Total", xlSum
        .AddDataField .PivotFields("NOK %"), "Sum of NOK %", xlSum
        .AddDataField .PivotFields("OK %"), "Sum of OK %", xlSum
        .DataLabelRange.HorizontalAlignment = xlCenter
        .DataLabelRange.ReadingOrder = xlContext
        .TableRange2.HorizontalAlignment = xlCenter
    End With

End Sub

【讨论】:

  • @maajo ,我在 Set pt9 = pc9.CreatePivotTable(ws9.Range("A3")) 行中收到应用程序定义错误
  • @maajo,在行之间我也有一些空白行。有影响吗?
  • 嗨,珍妮,不,它不会影响它,我知道问题出在哪里,给我 3 分钟,我会尽力解决它
  • 当然。我会坚持到那时
  • 只是在查看我的图像时,我注意到下面的空行不可见。我想补充一点。可能需要考虑。我在结果表中有 A 列,它表示周数。周数从 1 开始,到 52 结束。现在我们在第 30 周,所以第 30 周被填满,下面从 31 到 52 的行仍然是空的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2012-08-27
  • 2015-08-05
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多