使用vba创建数据透视表 - 运行时错误

时间:2016-07-12 14:07:04

标签: excel-vba pivot vba excel

我正在尝试使用vba创建数据透视表。以下是我尝试的代码:

Sub CreatePivot()

    Dim objTable As PivotTable
    Dim objField As PivotField
    Dim ws As Worksheet

    Set ws = Worksheets.Add
    Sheets(ws.Name).Name = "Write-Off Pivot"

    ' Select the sheet and first cell of the table that contains the data.
    ActiveWorkbook.Sheets("GEP Write-Offs Rawdata").Select
    Range("A1").Select

    Set objTable = ws.PivotTableWizard

    ' Specify row and column fields.
    Set objField = objTable.PivotFields("MPG")
    objField.Orientation = xlRowField

    ' Specify a data field with its summary
    ' function and format.
    Set objField = objTable.PivotFields("'A_780610 - Inventory - Obsolescence")
    objField.Orientation = xlDataField
    objField.Function = xlSum
    objField.NumberFormat = "$ #,##0"


End Sub

我收到此错误消息。 "运行时错误' 104'" "方法' pivottables'对象' _worksheet'失败"

这个问题似乎存在于这一问题中,但无法确定导致问题的原因。

Set objTable = ws.PivotTableWizard

3 个答案:

答案 0 :(得分:1)

您的以下行需要更改。

//Add expand button elements
$(' > ' + settings.childElement, this)
.before('<span class="accordion-btn-wrap"><a href="#"><span class="accordion-btn accordion-collapsed">' 
+ settings.expandButtonText + '</span><span class="accordion-btn accordion-expanded">' 
+ settings.collapseButtonText + '</span></a></span>');

这应该指向数据源表。所以它应该是。

Set objTable = ws.PivotTableWizard   

它会生成数据透视表,并在命令

后写入新添加的工作表
Set objTable = Sheets("GEP Write-Offs Rawdata").PivotTableWizard   

与它无关。请修改它。

这是@Rory建议的补充。

答案 1 :(得分:0)

您需要使用ActiveSheet.Pivottablewizard而不是ws.PivotTableWizard,因为ws表上没有任何数据。

顺便说一句,这是不必要的错综复杂的:

Sheets(ws.Name).Name = "Write-Off Pivot"

您只需要:

ws.Name = "Write-Off Pivot"

答案 2 :(得分:0)

PivotTableWizard方法需要一些参数:

像这样:

 Set objTable = ws.PivotTableWizard(xlDatabase, ActiveWorkbook.Worksheets("Table8").Range("A1:A5"), ws.Range("A1:A6"))

有很多参数,对于您的示例,我需要数据源类型,数据源和数据目标。

如果您只是打开&#34;(&#34;在es.PivotTableWizard之后,您可以看到所有参数,或者您可以在此处获取它们:

https://msdn.microsoft.com/de-de/library/office/ff839228.aspx