我有一个包含多个类别的工作表,以及一个带有数据透视表的工作表。
我正在按类别过滤,创建一个新工作簿,将数据透视表工作表和过滤的类别复制到新工作簿。我对每个类别重复这个过程。
我的问题是第一个类别范围是正确的,但是当我重新查询其他类别的范围时,范围保持不变。
For i = 1 To 10 '10 categories
...
Set Data_sht = NewBook.Worksheets("Temp")
Set Pivot_sht = NewBook.Worksheets("Category")
PivotName = "PivotTable2"
Set StartPoint = Data_sht.Range("A1")
Set DataRange = Data_sht.Range(StartPoint, StartPoint.SpecialCells(xlLastCell))
NewRange = Data_sht.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
'Change Pivot Table Data Source Range Address
Pivot_sht.PivotTables(PivotName).ChangePivotCache NewBook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
....
Next i
第一遍(类别(上的 NewRange 有 545 行。我已经验证了这是正确的。第二遍(类别(上的 NewRange 仍包含 545 行,即使它应该是 260 行。
有没有办法强制重新读取Data_sht(数据手册(?
谢谢。
我发现了一些奇怪的东西,但它解决了我的问题。
NewRange = "Temp!A1:X" & LastRow(ActiveSheet)
Function LastRow(sh As Worksheet)
'Excel doesn't seem to return the true count until the WS
'is queried a second time. Bug?
For i = 0 To 2
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
Next i
End Function
希望这对某人有所帮助。