Excel 枢轴 table 范围更新通过 VBA 获得太多行
Excel Pivot table range update via VBA gets too many rows
我使用的是 Excel 2016,我正在从 SharePoint 列表中提取数据。提取数据后,我在数据列表的开头插入了 3 行,并插入了一些数据。然后,我启动一个 Sub 来更新枢轴 tables 以获取新数据并扩展 table 的旧范围,以便它获取所有数据。它获取所有数据,但范围超出 table 本身。它最终选择了两个不属于数据列表的额外行。如下图所示,它应该只拾取到第 11 行,但它拾取到第 13 行。这添加了两行空白数据,使枢轴 tables 的外观不好看。提取范围信息的代码显示在星号之间。
Data List Example
Sub UpdateTable()
Dim Data_Sheet As Worksheet
Dim Pivot_Sheet As Worksheet
Dim StartPoint As Range
Dim DataRange As Range
Dim PivotName As String
Dim PivotTables(3) As String
Dim Table As Integer
Dim NewRange As String
Dim LastCol As Long
Dim lastRow As Long
'MsgBox Prompt:="Running UpdateTable"
'Set Pivot Table & Source Worksheet
Set Data_Sheet = ThisWorkbook.Worksheets("owssvr")
Set Pivot_Sheet = ThisWorkbook.Worksheets("Summary")
PivotTables(0) = "pvtOverOpen"
PivotTables(1) = "pvtOverAgeBracket"
PivotTables(2) = "pvtOverCreate"
PivotTables(3) = "pvtOverClosed"
'Loop through each pivot table and update it
For Table = 0 To 3 Step 1
'Enter in Pivot Table Name
PivotName = PivotTables(Table)
'Defining Staring Point & Dynamic Range
Data_Sheet.Activate
'**********************************************************************************
Set StartPoint = Data_Sheet.Range("A1")
Set DataRange = Data_Sheet.Range(StartPoint, StartPoint.SpecialCells(xlLastCell))
NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
'Change Pivot Table Data Source Range Address
Pivot_Sheet.PivotTables(PivotName). _
ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
'***********************************************************************************
MsgBox Prompt:=NewRange
'Ensure Pivot Table is Refreshed
Pivot_Sheet.PivotTables(PivotName).RefreshTable
'End of For Loop
Next Table
End Sub
您使用的范围是多少?请查看下面的 link 以了解有关您实际使用范围的更多信息。
https://contexturesblog.com/archives/2012/03/01/select-actual-used-range-in-excel-sheet/
删除任何不在您预期使用范围内的 rows/column,保存您的工作簿,然后创建您的数据透视表 table。
我实际上找到了修复方法。这是我使用的一种旧方法,它决定起作用。这是我用来抓取数据的确切范围的代码片段:
Set StartPoint = Data_Sheet.Range("A1")
LastCol = StartPoint.End(xlToRight).Column
DownCell = StartPoint.End(xlDown).Row
Set DataRange = Data_Sheet.Range(StartPoint, Cells(DownCell, LastCol))
NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
我使用的是 Excel 2016,我正在从 SharePoint 列表中提取数据。提取数据后,我在数据列表的开头插入了 3 行,并插入了一些数据。然后,我启动一个 Sub 来更新枢轴 tables 以获取新数据并扩展 table 的旧范围,以便它获取所有数据。它获取所有数据,但范围超出 table 本身。它最终选择了两个不属于数据列表的额外行。如下图所示,它应该只拾取到第 11 行,但它拾取到第 13 行。这添加了两行空白数据,使枢轴 tables 的外观不好看。提取范围信息的代码显示在星号之间。
Data List Example
Sub UpdateTable()
Dim Data_Sheet As Worksheet
Dim Pivot_Sheet As Worksheet
Dim StartPoint As Range
Dim DataRange As Range
Dim PivotName As String
Dim PivotTables(3) As String
Dim Table As Integer
Dim NewRange As String
Dim LastCol As Long
Dim lastRow As Long
'MsgBox Prompt:="Running UpdateTable"
'Set Pivot Table & Source Worksheet
Set Data_Sheet = ThisWorkbook.Worksheets("owssvr")
Set Pivot_Sheet = ThisWorkbook.Worksheets("Summary")
PivotTables(0) = "pvtOverOpen"
PivotTables(1) = "pvtOverAgeBracket"
PivotTables(2) = "pvtOverCreate"
PivotTables(3) = "pvtOverClosed"
'Loop through each pivot table and update it
For Table = 0 To 3 Step 1
'Enter in Pivot Table Name
PivotName = PivotTables(Table)
'Defining Staring Point & Dynamic Range
Data_Sheet.Activate
'**********************************************************************************
Set StartPoint = Data_Sheet.Range("A1")
Set DataRange = Data_Sheet.Range(StartPoint, StartPoint.SpecialCells(xlLastCell))
NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
'Change Pivot Table Data Source Range Address
Pivot_Sheet.PivotTables(PivotName). _
ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
'***********************************************************************************
MsgBox Prompt:=NewRange
'Ensure Pivot Table is Refreshed
Pivot_Sheet.PivotTables(PivotName).RefreshTable
'End of For Loop
Next Table
End Sub
您使用的范围是多少?请查看下面的 link 以了解有关您实际使用范围的更多信息。
https://contexturesblog.com/archives/2012/03/01/select-actual-used-range-in-excel-sheet/
删除任何不在您预期使用范围内的 rows/column,保存您的工作簿,然后创建您的数据透视表 table。
我实际上找到了修复方法。这是我使用的一种旧方法,它决定起作用。这是我用来抓取数据的确切范围的代码片段:
Set StartPoint = Data_Sheet.Range("A1")
LastCol = StartPoint.End(xlToRight).Column
DownCell = StartPoint.End(xlDown).Row
Set DataRange = Data_Sheet.Range(StartPoint, Cells(DownCell, LastCol))
NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)