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)