首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过VBA更新Excel透视表区域获取的行数太多

通过VBA更新Excel透视表区域获取的行数太多
EN

Stack Overflow用户
提问于 2021-06-25 00:53:34
回答 2查看 49关注 0票数 0

我正在使用Excel2016,并从SharePoint列表中提取数据。一旦数据被拉入,我在数据列表的开头插入了3行,并插入了一些数据。然后,我启动Sub来更新数据透视表,以获取新数据并扩展表的旧范围,使其获取所有数据。它提取所有数据,但范围超出了表本身。它最终选择了两个额外的行,这些行不是数据列表的一部分。在下图中可以看到,它应该只拾取到第11行,但它拾取到第13行。这会添加两行空白数据,使透视表看起来不那么美观。提取范围信息的代码显示在星号之间。

Data List Example

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-01 00:43:25

我真的找到了解决办法。这是我使用的一种老方法,我决定用它来工作。这是我使用的代码片段,它获取了准确的数据范围:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-06-25 20:23:22

你使用的范围是多少?查看下面的链接,了解有关实际使用范围的更多信息。

https://contexturesblog.com/archives/2012/03/01/select-actual-used-range-in-excel-sheet/

删除任何不在预期使用范围内的行/列,保存工作簿,然后创建数据透视表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68119852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档