我正试图摆脱“名称硬编码”并进入“变量编码”,这样我就可以在其他支点中使用我的代码,无论我的数据源中有哪些字段名称。我想知道下面的示例代码中有什么问题...
我收到以下错误: 运行时错误'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
答案 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对象的字段。