2017-02-15 69 views
0

我有一个由400行和35列组成的表,并且创建了一个VBA脚本来创建一个数据透视表,并成功比较了2列与12个单独的列。你可以根据列索引而不是VBA中的列名创建数据透视表

在生成数据透视表时,使用了列标题(以避免混淆)。我是新的使用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代码将不能工作,因为它是不再是“2017年2月6日”。

我试图做在我的代码绝对单元格的引用,但有错误想出了

运行时错误“1004,无法获取 数据透视表类透视字段属性

有没有办法将PivotFields作为绝对单元格引用(即B3)?

回答

3

请尝试下面的代码(解释在代码注释内)。

你需要确保的单元格“B3”的格式是相同的人在PivotTable,否则你会在下面的行获得一个运行时错误:

.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 
+0

不幸的是我收到另一个运行时错误1004:无法获取您的密码(设置PvtTbl ......)的第9行的工作表类的数据透视表属性 – alex

+0

@alex你有没有'PivotTable' SET- up?什么是工作表名称?确保'Worksheets'和PivotTable'的名称匹配代码 –

+0

我更新了我的代码和上面的设置。 – alex