【发布时间】:2021-09-08 04:34:13
【问题描述】:
我正在使用 Excel 2016,我正在从 SharePoint 列表中提取数据。一旦数据被拉入,我在数据列表的开头插入了 3 行,并插入了一些数据。然后我启动一个 Sub 来更新数据透视表以获取新数据并扩展表的旧范围,以便它获取所有数据。它获取所有数据,但范围超出了表本身。它最终拾取了两个不属于数据列表的额外行。如下图所示,它应该只拾取到第 11 行,但它会拾取到第 13 行。这会添加两行空白数据,从而使数据透视表的外观看起来不太好。提取范围信息的代码显示在星号之间。
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
【问题讨论】:
-
尝试使用表名作为参考,因为它会随表一起扩展,并避免枢轴抓取该命名范围之外的行。
标签: excel vba automation pivot-table