Liebe VBA Profis,
ich habe bereits eine Lösung von petaod gefunden. Leider kann ich diese nicht zu 100% verwenden.
Es werden alle Arbeitsblätter kopiert und die Formeln/Verlinkungen/Makrofelder sind gelöscht, ABER...
...ich bekomme leider immer eine Fehlermeldung (Laufzeitfehler 1004 - Nullwert kann nicht als Element oder Feldname in einen PivotTable-Bericht aufgenommen werden.). Die Pivottabellen sind fast auf jedem Arbeitsblatt, bekommen Ihre daten aber nur von einem Datenblatt, in welchem keine Nullwerte zu sehen sind.
Meinem Newbie-Verständnis nach, sollte es reichen, wenn das kopieren der Tabellenblätter nur mit Werten erfolgt.
Quasi: Wenn dieses ws.copy (Zeile 14) nur die Werte anstelle der Pivot-Tabelle kopieren würde.
For Each ws In ThisWorkbook.Worksheets
ws.Copy After:=wb.Sheets(wb.Sheets.Count)
Der Code von petaod inkl. kleinen Anpassungen durch mich:
Ich hoffe, dass ich alle notwendigen Infos gegeben habe und mir Jemand helfen kann, das Problem zu lösen. Bei Rückfragen fragt gern vorher, bevor Ihr euch die Mühe macht etwas auszudenken. Ich DENKE alle notwendigen Infos gegeben zu haben, mir fehlt aber auch einfach das Verständnis für derartige Codes...
Ich hoffe auch, dass keine Beispieldatei benötigt wird: das wir sonst relativ aufwändig...
Beste Grüße
Luca
ich habe bereits eine Lösung von petaod gefunden. Leider kann ich diese nicht zu 100% verwenden.
Es werden alle Arbeitsblätter kopiert und die Formeln/Verlinkungen/Makrofelder sind gelöscht, ABER...
...ich bekomme leider immer eine Fehlermeldung (Laufzeitfehler 1004 - Nullwert kann nicht als Element oder Feldname in einen PivotTable-Bericht aufgenommen werden.). Die Pivottabellen sind fast auf jedem Arbeitsblatt, bekommen Ihre daten aber nur von einem Datenblatt, in welchem keine Nullwerte zu sehen sind.
Meinem Newbie-Verständnis nach, sollte es reichen, wenn das kopieren der Tabellenblätter nur mit Werten erfolgt.
Quasi: Wenn dieses ws.copy (Zeile 14) nur die Werte anstelle der Pivot-Tabelle kopieren würde.
For Each ws In ThisWorkbook.Worksheets
ws.Copy After:=wb.Sheets(wb.Sheets.Count)
Der Code von petaod inkl. kleinen Anpassungen durch mich:
Quellcode
- Sub Jahreswechsel()
- 'neuer Dateiname
- Dim Dateiname As String
- Dateiname = "Q-Meldungen_" & Worksheets("Beschreibung").Range("XFD2").Value
- 'neuer Speicherort
- Dim Speicherort As String
- Speicherort = "hier steht sonst der Speicherpfad"
- Dim wb As Workbook, ws As Worksheet, sh As Shape
- Set wb = Workbooks.Add(xlWBATWorksheet)
- wb.Sheets(1).Name = "deleteMe"
- For Each ws In ThisWorkbook.Worksheets
- ws.Copy After:=wb.Sheets(wb.Sheets.Count)
- Next
- For Each Link In wb.LinkSources(xlLinkTypeExcelLinks)
- wb.BreakLink Name:=Link, Type:=xlLinkTypeExcelLinks
- Next
- For Each ws In wb.Worksheets
- ws.UsedRange.Formula = ws.UsedRange.Value
- For Each sh In ws.Shapes
- sh.Delete
- Next
- Next
- Do While wb.Connections.Count > 0
- wb.Connections.Item(1).Delete
- Loop
- Application.DisplayAlerts = False
- wb.Sheets("deleteMe").Delete
- wb.SaveAs _
- Filename:=Speicherort & Worksheets("Beschreibung").Range("XFD2") & "\" & Dateiname & "_" & Format(Date, "yyyymmdd") & ".xlsx"
- Application.DisplayAlerts = True
- wb.Close False
- End Sub
Ich hoffe, dass ich alle notwendigen Infos gegeben habe und mir Jemand helfen kann, das Problem zu lösen. Bei Rückfragen fragt gern vorher, bevor Ihr euch die Mühe macht etwas auszudenken. Ich DENKE alle notwendigen Infos gegeben zu haben, mir fehlt aber auch einfach das Verständnis für derartige Codes...
Ich hoffe auch, dass keine Beispieldatei benötigt wird: das wir sonst relativ aufwändig...
Beste Grüße
Luca
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Luca441“ ()