使用变量PivotTable和PivotField名称

时间:2015-08-04 21:15:15

标签: excel vba excel-vba pivot-table

我正试图摆脱“名称硬编码”并进入“变量编码”,这样我就可以在其他支点中使用我的代码,无论我的数据源中有哪些字段名称。我想知道下面的示例代码中有什么问题...

我收到以下错误: 运行时错误'1004': 无法获取Worksheet类的PivotTables属性

我正在使用“Microsoft Office 2013中的Excel二进制工作簿(* .xlsb)

例如:

名称硬编码:

With ActiveSheet.PivotTables("PivotTable10").PivotFields("Item")

这个就像美女一样!

变量编码:

With ActiveSheet.PivotTables(pvtTable).PivotFields(pvtField) 

这个不起作用!

示例代码:

Sub VariablePivotName_and_PivotField()

Dim pvtTable As PivotTable, pvtField As PivotField

For Each pvtTable In ActiveSheet.PivotTables

    For Each pvtField In pvtTable.PivotFields

'        MsgBox pvtTable.Name

'        MsgBox pvtField.Name

'        With ActiveSheet.PivotTables("PivotTable10").PivotFields("Item")               '''' This one works like beauty!

        With ActiveSheet.PivotTables(pvtTable).PivotFields(pvtField)                    ''''This one does not work!

            .Orientation = xlRowField       'Could be any other thing I want to change

            .LayoutForm = xlTabular         'Could be any other thing I want to change

        End With

    Next

Next

End Sub

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您尝试将变量pvtTable和pvtField用作字符串,而不是它们所使用的对象类型。

行:

With ActiveSheet.PivotTables(pvtTable).PivotFields(pvtField)                    
    .Orientation = xlRowField        

尝试使用名称作为字符串pvtTable获取数据透视表,然后使用名称作为字符串pvtField获取PivotField,但遗憾的是这些变量都不是字符串。

可行的一行是:

With ActiveSheet.PivotTables(pvtTable.Name).PivotFields( pvtField.Name)                    
    .Orientation = xlRowField
End With        

因为pvtTable.Name是一个字符串的pivottable的属性。类似地,pvtField.Name是pivotField的一个属性,它是一个字符串。

使用代码会更容易:

With pvtField
    .Orientation = xlRowField
    .LayoutForm = xlTabular
End With

因为它将作用于PivotField对象的字段。