【问题标题】:I am unable to add Data Field to my Pivot Table VBA我无法将数据字段添加到我的数据透视表 VBA
【发布时间】:2018-01-28 11:21:36
【问题描述】:

我得到一个运行时错误

无法获取 Worksheet 类的 PivotTables 属性

当我运行以下代码时:

Sub UpdatePivot()

Dim ws As Worksheet, SrcData As String, pvtCache As PivotCache
Dim ws2 As Worksheet, NR As Long, NC As Long, ws3 As Worksheet
Dim pf As PivotField, pt As PivotTable, df As PivotField, str As String

'Set ws = ThisWorkbook.Worksheets("Lisun Data")
Set ws2 = ThisWorkbook.Worksheets("Cover")
Set ws3 = ThisWorkbook.Worksheets("Stockist")
Set pt = ws3.PivotTables("PivotTable3")
Set pt = ws3.PivotTables("PivotTable3")
With pt.PivotFields(" May-17")
    .Orientation = xlColumnField
    .Function = xlSum
    .Position = 1
End With

End Sub

我可以知道有什么问题吗?

我确实事先将数据源添加到数据模型中,但我不确定究竟是什么导致了错误。

【问题讨论】:

  • 确保您引用的是正确的工作表并且该工作表上存在数据透视表名称
  • 打开宏记录器,并手动执行您尝试执行的操作,这样您就可以查看生成的代码,从而了解您需要对代码进行哪些更改.

标签: vba excel pivot-table


【解决方案1】:

尝试下面的代码来尝试捕获您的错误,代码的 cmets 中的解释:

Option Explicit

Sub UpdatePivot()

Dim ws As Worksheet, SrcData As String, pvtCache As PivotCache
Dim ws2 As Worksheet, NR As Long, NC As Long, ws3 As Worksheet
Dim pf As PivotField, pt As PivotTable, df As PivotField, str As String

'Set ws = ThisWorkbook.Worksheets("Lisun Data")
Set ws2 = ThisWorkbook.Worksheets("Cover")
Set ws3 = ThisWorkbook.Worksheets("Stockist")

' 1ST: Trap the Pivot-Table object
On Error Resume Next
Set pt = ws3.PivotTables("PivotTable3")
On Error GoTo 0
If pt Is Nothing Then '<-- Pivot Table does't exist (Pivot Table renamed ?)
    MsgBox "Pivot-Table object Error!"
Else ' Pivot-Table object exists

    ' 2NDT: Trap the PivotField object
    On Error Resume Next
    Set pf = pt.PivotFields(" May-17")
    On Error GoTo 0
    If pf Is Nothing Then
        MsgBox "Pivot-Field object Error!"
    Else
        With pf
            .Orientation = xlColumnField
            .Function = xlSum
            .Position = 1
        End With
    End If
End If

End Sub

【讨论】:

  • 您好,感谢您的回复。我知道现在是什么问题,但我仍然不知道如何解决它。问题是我从数据模型中调用 Pivot Field,这意味着 Pivot Field 名称是 [Table3].[May-17].[May-17],类似这样。但是,我尝试用它替换 Pivot Field 名称,但它仍然不起作用。如何将数据模型字段添加到行或列?有谁知道?我已经用了 2 天了。
  • @Nanth 你想添加它吗?它不存在于数据透视表中?
  • 它作为数据透视字段存在,我想使用 VBA 将它拖到行区域。
  • @Nanth 我不清楚,根据你的代码,你想要一个“总和”,但你提到你想要它在 Row 区域,那么它是哪个?
【解决方案2】:

感谢@Shai Rado 的所有反馈,非常有价值。也非常感谢@jeffreyweir,我录制了一个宏并找到了我需要的答案。从数据模型中添加任何数据透视字段的代码如下:

ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
        "PivotTable3").CubeFields("[Measures].[Sum of May-17]"), "Sum of May-17"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多