我有一些需要选择Prod的VBA代码。代码,Lims#,SampleID,日志日期,地区名称,地区,机器ID,灰,cNDF,CP,Ca,Cl来自数据透视表。
当我使用整行时,我可以选择在A列中进行干净粘贴所需的所有数据。但是,现在我想要粘贴到列
.PivotItems(PivotFieldName.Caption).DataRange.EntireRow.Select
我试图只做数据范围,但它不会拉出Prod.Code,Lims#等列。它只会抓取分析物列。
.PivotItems(PivotFieldName.Caption).DataRange.Select
我也尝试从WholeRow做一个范围,然而我无法弄清楚如何获得所选Prod的最后一列或最后一行。代码。
.PivotItems(PivotFieldName.Caption).DataRange.EntireRow.Range("A1:BB1").Select
如何获取Prod的所有列。代码选择像整行方法,排除额外的行?
The Prod.Code Columns&行数可能会根据数据而改变,因此我需要使其能够抓住正确的范围。
进一步的代码结构:
Dim PvtTbl As PivotTable
Dim PvtFld As PivotField
Set PvtTbl = Sheets("NEP Pivot").PivotTables("NEP_Pivot")
Set PvtFld = PvtTbl.PivotFields("Prod. Code")
For Each PivotFieldName In PvtFld.PivotItems
'PivotFieldName.Caption represents "EHB"
If IsError(Application.Match(PivotFieldName.Caption, rngList, 0)) Then
With PvtFld
On Error Resume Next
.PivotItems(PivotFieldName.Caption).ShowDetail = True 'Show pivot item
.PivotItems(PivotFieldName.Caption).DataRange.EntireRow.Copy
Destination:=Sheets(PivotFieldName.Caption).Range("A3")
...
..
.
答案 0 :(得分:1)
使用.DataBodyRange属性来获取数据透视表中的所有数据
PivotTable.DataBodyRange Property (Excel)
返回一个Range对象,该对象表示a中的值范围 数据透视表。只读。
语法
表达。 DataBodyRange
expression表示数据透视表对象的变量。
由于您还需要行元素,您可以执行以下操作,您可以根据较大的TableRange2属性与内部数据透视区域之间的列数差异来调整数据正文范围的大小。请注意,总计等可能会影响这一点,但这会告诉您如何开始考虑它。还有一个带有枢轴的TableRange1属性。
示例枢轴:
代码:
Option Explicit
Sub test()
Dim ws As Worksheet
Dim pvt As PivotTable
Dim columnsDifference As Long
Set ws = ActiveSheet
Set pvt = ws.PivotTables("PivotTable4")
columnsDifference = pvt.TableRange2.Columns.Count - pvt.DataBodyRange.Columns.Count
With pvt.DataBodyRange
Debug.Print .Offset(, -columnsDifference).Resize(.Rows.Count, .Columns.Count + columnsDifference).Address
End With
End Sub
我建议您阅读引用pivottable ranges in VBA。 您可以使用各种属性来确定范围,例如用于fieldItems的LabelRange和DataRange。你似乎已经探索了其中的一些。我的经验是,这些受到您的可旋转布局的影响,您需要确定获取数据的当前方法组合。
例如,我使用以下内容获取EHB的所有数据,数据布局如下:
Option Explicit
Sub test()
Dim ws As Worksheet
Dim pvt As PivotTable
Dim columnsDifference As Long
Dim wb As Workbook
Set wb = ThisWorkbook
Set ws = wb.Worksheets("mySheetName")
Set pvt = ws.PivotTables("NEP_Pivot")
columnsDifference = pvt.TableRange2.Columns.Count - pvt.DataBodyRange.Columns.Count
With pvt.DataBodyRange
Debug.Print pvt.PivotFields("Prod. Code").PivotItems("EHB").LabelRange.Offset(-1, 0).Resize(pvt.PivotFields("Prod. Code").PivotItems("EHB").LabelRange.Rows.Count, .Columns.Count + columnsDifference).Address
End With
End Sub
这产生了结果
$C$11:$N$13
请注意我必须组合函数才能获得此结果,如果可更改轴位布局发生变化,则会崩溃。
我也能用:
写作With pvt.TableRange1
Debug.Print pvt.PivotFields("Prod. Code").PivotItems("EHB").LabelRange.Resize(pvt.PivotFields("Prod. Code").PivotItems("EHB").LabelRange.Rows.Count, .Columns.Count).Offset(-1, 0).Address
End With