在VBA中,是否可以按列索引而不是列名创建透视表

在VBA中,是否可以按列索引而不是列名创建透视表,vba,excel,pivot-table,Vba,Excel,Pivot Table,我有一个由400行和35列组成的表,并制作了一个VBA脚本来制作一个透视表,成功地比较了2列和12列 生成数据透视表时,会使用列标题(以避免混淆)。我是VBA新手,我就是这样把所有的错误都称为错误的 ActiveCell.Select Range("AA3").Select Selection.CurrentRegion.Select ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Pra

我有一个由400行和35列组成的表,并制作了一个VBA脚本来制作一个透视表,成功地比较了2列和12列

生成数据透视表时,会使用列标题(以避免混淆)。我是VBA新手,我就是这样把所有的错误都称为错误的

ActiveCell.Select
Range("AA3").Select
Selection.CurrentRegion.Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Practitioners!R3C1:R246C27", Version:=xlPivotTableVersion15). _
    CreatePivotTable TableDestination:="Practitioners!R3C29", TableName:= _
    "PivotTable8", DefaultVersion:=xlPivotTableVersion15
Sheets("Practitioners").Select
Cells(3, 29).Select
ActiveWorkbook.ShowPivotTableFieldList = False
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Capability")
    .Orientation = xlRowField
    .Position = 1
End With
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Sub-Capability")
    .Orientation = xlRowField
    .Position = 2
End With
ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _
    "PivotTable8").PivotFields("Grade"), "Count of Grade", xlCount
ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _
    "PivotTable8").PivotFields("06-Feb-2017"), "Count of 06-Feb-2017", xlCount
但是我的列标题每周都会更改,更改标题的名称意味着VBA代码将不起作用,因为它不再是“06-Feb-2017”

我试图在我的代码中引用一个绝对单元格,但出现了一个错误

运行时错误“1004”,无法获取 数据透视表类

是否有方法将
数据透视字段
称为绝对单元格引用(即B3)?

尝试下面的代码(解释在代码注释中)

您需要确保单元格“B3”的格式与
数据透视表中的格式相同,否则将在以下行出现运行时错误:

.AddDataField PvtTbl.PivotFields(PvtFlfVal), "Count of " & PvtFlfVal, xlCount
代码

Option Explicit

Sub DynamicPivotTableCountField()

Dim PvtTbl As Pivottable
Dim PvtFlfVal '   As String

' set the Pivot Table, replace "Sheet1" with your sheet's name (don't use ActiveSheet)
Set PvtTbl = Worksheets("Practitioners").PivotTables("PivotTable8")

' get the value from Cell B3, make sure it's formatted the way you need it for the Pivot Table later
PvtFlfVal = Format(Worksheets("Practitioners").Range("B3").Value, "dd-mmm-yyyy")

With PvtTbl
    .AddDataField PvtTbl.PivotFields(PvtFlfVal), "Count of " & PvtFlfVal, xlCount
End With

End Sub
尝试下面的代码(解释在代码注释中)

您需要确保单元格“B3”的格式与
数据透视表中的格式相同,否则将在以下行出现运行时错误:

.AddDataField PvtTbl.PivotFields(PvtFlfVal), "Count of " & PvtFlfVal, xlCount
代码

Option Explicit

Sub DynamicPivotTableCountField()

Dim PvtTbl As Pivottable
Dim PvtFlfVal '   As String

' set the Pivot Table, replace "Sheet1" with your sheet's name (don't use ActiveSheet)
Set PvtTbl = Worksheets("Practitioners").PivotTables("PivotTable8")

' get the value from Cell B3, make sure it's formatted the way you need it for the Pivot Table later
PvtFlfVal = Format(Worksheets("Practitioners").Range("B3").Value, "dd-mmm-yyyy")

With PvtTbl
    .AddDataField PvtTbl.PivotFields(PvtFlfVal), "Count of " & PvtFlfVal, xlCount
End With

End Sub

不幸的是,我收到另一个运行时错误1004:无法在代码第9行获取工作表类的数据透视表属性(Set PvtTbl…@alex您是否有数据透视表设置?工作表的名称是什么?确保
工作表和数据透视表的名称与code@alex我已编辑代码以匹配您的
工作表
名称。不幸的是,我收到另一个运行时错误1004:无法获取代码第9行上工作表类的数据透视表属性(设置PvtTbl…)@alex您有
数据透视表设置吗?工作表的名称是什么?确保
工作表和数据透视表的名称与code@alex我已编辑代码以匹配您的
工作表
名称