Fehler beim Makro zum erstellen einer PivoTabelle

Anonym
2025-02-13T12:59:09+00:00

Hallo zusammen,

ich habe ein Problem mit einem Excel Makro und hoffe das ihr mir helfen könnt.

Ich habe eine Excel Datei mit einer Tabelle in der Jahreszahlen und Kunden (Aufträge) aufgelistet sind.

Nun möchte ich ein Makro erstellen, welches mir pro Jahr ein neues Arbeitsblatt erstellt und mir dort eine PivoTabelle mit der Anzahl der Aufträge pro Kunde einfügt.

In der Tabelle sind die Daten von 2018 bis 2024. Das Makro funktioniert für das Jahr 2018 (Es wird ein neues Arbeitsblatt erstellt und die PivotTabelle mit den richtigen Daten eingefügt).

Das Arbeitsblatt für 2019 wird auch noch erstellt, dort bekomme ich dann aber einen Laufzeitfehler 1004 und es wird keine PivoTabelle mehr erstellt.

Die Daten konnten nicht aus "$A1:$B1,[Test.xlsm]Daten'!$A$270:$B$511" in der Arbeitsmappe Test.xlsm abgerufen werden

Das Makro bleibt dann an der Stelle

' Create Pivot table 

        Set PT = PTCache.CreatePivotTable( _ 

            TableDestination:=PRange, _ 

            TableName:="PivotTable" & YearVal)

stehen

Das hier ist der Code des Makros:

Sub CreatePivotTables() 

    Dim SrcData As Range 

    Dim SrcSheet As Worksheet 

    Dim PTCache As PivotCache 

    Dim PT As PivotTable 

    Dim PRange As Range 

    Dim FinalRow As Long 

    Dim i As Long 

    Dim YearList As Collection 

    Dim YearVal 

    ' Set the variables 

    Set SrcSheet = ThisWorkbook.Sheets("Daten") ' Set to your source sheet name 

    Set YearList = New Collection 

    ' Create a unique list of years 

    On Error Resume Next 

    FinalRow = SrcSheet.Cells(SrcSheet.Rows.count, 1).End(xlUp).Row 

    For i = 2 To FinalRow ' Assume row 1 has headers 

        YearList.Add SrcSheet.Cells(i, 1).Value, CStr(SrcSheet.Cells(i, 1).Value) 

    Next i 

    On Error GoTo 0 

    ' Create a pivot table for each unique year 

    For Each YearVal In YearList 

        ' Check if AutoFilter is on and turn off 

        If SrcSheet.AutoFilterMode Then 

            SrcSheet.AutoFilterMode = False 

        End If 

        ' Apply AutoFilter 

        SrcSheet.Range("A1:B" & FinalRow).AutoFilter Field:=1, Criteria1:=YearVal 

        ' SrcSheet.Cells.AutoFilter Field:=1, Criteria1:=YearVal 

        ' Set the source data for Pivot Table 

        Set SrcData = SrcSheet.Range("A1:B" & FinalRow).SpecialCells(xlCellTypeVisible) 

        ' Set SrcData = SrcSheet.UsedRange.SpecialCells(xlCellTypeVisible) 

        ' Ausgabe der Adresse des Datenbereichs in das Direktfenster 

        Debug.Print "Year: " & YearVal & "; SrcData.Address: " & SrcData.Address 

'        ' Ausgabe der Werte des Datenbereichs 

'        Dim cell As Range 

'        For Each cell In SrcData 

'        Debug.Print "Cell Address: " & cell.Address & "; Value: " & cell.Value 

'        Next cell 

        ' Ausgabe der ersten 10 Werte des Datenbereichs 

        Dim cell As Range 

        Dim count As Integer 

        count = 0 

        For Each cell In SrcData 

            Debug.Print "Cell Address: " & cell.Address & "; Value: " & cell.Value 

            count = count + 1 

            If count >= 10 Then Exit For 

        Next cell 

        ' Create Pivot Cache from Source Data 

        Set PTCache = ThisWorkbook.PivotCaches.Create( _ 

            SourceType:=xlDatabase, _ 

            SourceData:=SrcData) 

        ' Überprüfen ob PTCache erfolgreich erstellt wurde 

        If Not PTCache Is Nothing Then 

            Debug.Print "PivotCache wurde erfolgreich erstellt für: Jahr " & YearVal 

        Else 

            Debug.Print "Fehler bei der Erstellung von PivotCache für: Jahr " & YearVal 

        End If 

        ' Die Datenquelle des PTCache anzeigen 

        Debug.Print "SourceType: " & PTCache.SourceType 

        Debug.Print "SourceData: " & PTCache.SourceData 

        ' Set range for pivot table 

        ' Set PRange = ThisWorkbook.Sheets.Add().Range("A1") 

        ' Namen für das neue Arbeitsblatt vergeben 

        Dim newSheet As Worksheet 

        Set newSheet = ThisWorkbook.Sheets.Add() 

        newSheet.Name = YearVal 

        Set PRange = newSheet.Range("A1") 

        ' Create Pivot table 

        Set PT = PTCache.CreatePivotTable( _ 

            TableDestination:=PRange, _ 

            TableName:="PivotTable" & YearVal) 

        ' PivotTabellenName und Ziel anzeigen 

        Debug.Print "Pivot Table Name: " & PT.Name 

        Debug.Print "Table Destination: " & PT.TableRange2.Address 

        ' Set up the row & value fields 

        With PT 

            .PivotFields("Gruppe").Orientation = xlRowField 

            .PivotFields("Gruppe").Orientation = xlDataField 

            '.PivotFields("Gruppe").Function = xlCount 

        End With 

        ' Clear the AutoFilter 

        SrcSheet.AutoFilterMode = False 

    Next YearVal 

End Sub 

Ich habe mir auch die Inhalte der Variablen im Direktbereich ausgeben lassen:

Year: 2018; SrcData.Address: $A$1:$B$269

Cell Address: $A$1; Value: JAHR

Cell Address: $B$1; Value: GRUPPE

Cell Address: $A$2; Value: 2018

Cell Address: $B$2; Value: ***

Cell Address: $A$3; Value: 2018

Cell Address: $B$3; Value: ***

Cell Address: $A$4; Value: 2018

Cell Address: $B$4; Value: ***

Cell Address: $A$5; Value: 2018

Cell Address: $B$5; Value: ***

PivotCache wurde erfolgreich erstellt für: Jahr 2018

SourceType: 1

SourceData: Daten!Z1S1:Z269S2

Pivot Table Name: PivotTable2018

Table Destination: $A$1:$C$18

Year: 2019; SrcData.Address: $A$1:$B$1,$A$270:$B$511

Cell Address: $A$1; Value: JAHR

Cell Address: $B$1; Value: GRUPPE

Cell Address: $A$270; Value: 2019

Cell Address: $B$270; Value: ***

Cell Address: $A$271; Value: 2019

Cell Address: $B$271; Value: ***

Cell Address: $A$272; Value: 2019

Cell Address: $B$272; Value: ***

Cell Address: $A$273; Value: 2019

Cell Address: $B$273; Value: ***

PivotCache wurde erfolgreich erstellt für: Jahr 2019

SourceType: 1

SourceData: $A$1:$B$1,[Test.xlsm]Daten!$A$270:$B$511

Die Daten scheinen alle richtig zu sein, auffällig ist nur, dass bei SourceData bei dem Jahr 2019 der DateiName mit drinn steht, ansonsten ist es mit dem Vorjahr gleich und auch der Inhalt ist korrekt.

So, viel Infos....

Ich hoffe mir kann jemand helfen.

Vielen Dank

Sebastian

Microsoft 365 Insider | Excel | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

1 Antwort

Sortieren nach: Am hilfreichsten
  1. Anonym
    2025-02-14T03:36:04+00:00

    Diese Antwort wurde automatisch übersetzt. Daher können grammatikalische Fehler oder seltsame Formulierungen vorkommen.

    Hallo, _Sebastian

    Wir verstehen das Problem, das Sie haben. Leider  wird VBA im Microsoft Answers-Forum nicht unterstützt. Es eignet sich besser für die Veröffentlichung auf Stack Overflow  (nur Englisch). Senden Sie Fragen zur VBA-Programmierung an Stack Overflow , indem Sie das vba-Tag zusammen mit allen anderen relevanten Tags verwenden.Bitte beachten Sie, dass Stack Overflow Richtlinien enthält, wie z. B. die Anforderung eines beschreibenden Titels, einer vollständigen und prägnanten Problembeschreibung und ausreichender Details, um Ihr Problem zu reproduzieren. Feature-Anfragen oder zu weit gefasste Fragen gelten als nicht zum Thema gehörig. Haftungsausschluss: Microsoft gibt keine Zusicherungen und/oder Gewährleistungen, weder stillschweigend noch anderweitig, und ist nicht verantwortlich für die Informationen, die Sie von den verlinkten Websites Dritter erhalten, oder für den Support im Zusammenhang mit der Technologie.Ich kann dir nicht helfen, aber ich lasse diese Frage offen, falls einer unserer großartigen Freiwilligen Ideen für dich hat.

    Vielen Dank für Ihr Verständnis und Ihre Geduld, ich freue mich auf Ihre Antwort.

    Aiden.C - MSFT | Microsoft Community Support-Spezialist

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare