2017-07-06 8 views
0

Ich arbeite an einem Code, den ich zusammengefügt habe, aber was ich finde, ist, dass nachdem der "used" Bereich gefunden wurde (ich versuche nicht .usedrange zu verwenden zur Zuverlässigkeit) ist, dass die SourceData:= eine Zeichenfolge erwartet (glaube ich).Aktualisiere Pivot-Datenbereich String oder Bereich

Gibt es eine Möglichkeit, den Bereich von Data bis zum Pivot-Tabellen-Datenbereich zu durchlaufen? Ich habe versucht, RealUsedRange.Address anzufügen, aber das war auch kein Glück.

Sub UpdatePivotRange() 

    Dim Rng1  As Range 
    Dim oWB   As Workbook 
    Dim oWS   As Worksheet 
    Dim DataSheet As Worksheet 
    Dim oPT   As PivotTable 

    Set oWB = ThisWorkbook 
    Set DataSheet = oWB.Sheets("Data") 
    Set Rng1 = RealUsedRange 

    If Rng1 Is Nothing Then 
     MsgBox "There is no used range, the worksheet is empty." 
    Else 
     For Each oWS In oWB.Worksheets 
      For Each oPT In oWS.PivotTables 
      'ERRROR BEGINS HERE ##### 
       oPT.ChangePivotCache _ 
        oWB.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Rng1) 
      'ERROR ENDS HERE ##### 
      Next oPT 
     Next oWS 
    End If 

End Sub 

Public Function RealUsedRange() As Range 

    Dim FirstRow  As Long 
    Dim LastRow   As Long 
    Dim FirstColumn  As Integer 
    Dim LastColumn  As Integer 
    Dim DataSheet  As Worksheet 
    Dim oWB    As Workbook 

    On Error Resume Next 
    Set oWB = ThisWorkbook 
    Set DataSheet = oWB.Sheets("Data") 
     With DataSheet 

      FirstRow = DataSheet.Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlValues, LookAt:= _ 
      xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row 

      FirstColumn = DataSheet.Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlValues, LookAt:= _ 
      xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column 

      LastRow = DataSheet.Cells(.Rows.Count, "A").End(xlUp).Row 

      LastColumn = DataSheet.Cells(1, Columns.Count).End(xlToLeft).Column 

      Set RealUsedRange = Range(Cells(FirstRow, FirstColumn), Cells(LastRow, LastColumn)) 

     End With 
    MsgBox "The range is" & RealUsedRange.Address 
    On Error GoTo 0 

End Function 

Antwort

0

konnte ich die fehlerbehaftete Leitung ändern durch Hinzufügen:

oPT.ChangePivotCache _ 
        oWB.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Data!" & Rng1.Address(ReferenceStyle:=xlR1C1)) 

Hoffnung das jemand in die Zukunft hilft.

Verwandte Themen