2017-05-25 53 views
0

我有一個包含多個類別的工作表和一個包含數據透視表的工作表。重複讀取過濾的表單時,範圍保持不變

我按類別過濾,創建新工作簿,將數據透視表工作表和過濾類別複製到新工作簿。我重複每個類別的過程。

我的問題是第一類範圍是正確的,但是當我重新查詢其他類別的範圍時,範圍保持不變。

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(數據表)?

謝謝。

+0

*我正在按類別過濾* - 我在代碼中看不到這一點。但是,如果你真的在你的範圍內使用'AutoFilter'方法。看看'SpecialCells(xlCellTypeVisible)'我認爲這將幫助你得到你需要的東西。 –

+0

怎麼辦? Set DataRange = Data_sht.Range(「A1」)。CurrentRegion.SpecialCells(xlCellTypeVisible) – sktneer

+0

SpecialCells(xlLastCell)是使用範圍中的最後一個單元格,而不是具有值的最後一個單元格 – Slai

回答

0

我發現了一些奇怪的東西,但它解決了我的問題。

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 

希望這可以幫助別人。