Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

2 einzelne Blätter in neuer Datei ohne Makros speichern

Forumthread: 2 einzelne Blätter in neuer Datei ohne Makros speichern

2 einzelne Blätter in neuer Datei ohne Makros speichern
13.01.2025 20:23:17
{Boris}
Hallo zusammen,

ich habe eine umfangreiche Datei (mit vielen Blättern), aus der ich 2 einzelne Blätter (enthalten Pivottabellen - heißen Pivot_Member und Pivot_Color) extrahieren und ohne Makros in einer neuen xlsx ohne systemseitige Rückfragen speichern möchte (die Blätter enthalten jeweils Ereigniscodes Worksheet_Activate zum Aktualisieren der Pivottabellen und die neue Datei darf keine Makros enthalten).

Ich hab mir dazu folgenden (funktionierenden) Code zusammengeklöppelt - aber das sieht ein bisschen nach "brute force" aus. Passt das von der Vorgehensweise (nach schnellem Drüberschauen) so oder würdet ihr es grundsätzlich anders machen? Falls ja: Wie?

Option Explicit

Sub Pivottabellen_in_neuer_Mappe_speichern()
'speichert die beiden Pivottabellen OHNE Makros
Dim wbNeu As Workbook
Dim sFilename As String
Dim objWs As Object
Dim s As String
On Error GoTo ERR_HANDLER
s = Range("A4").Text & "_Pivottabellen.xlsx" 'Das ist der Vorschlag für den neuen Dateinamen
Application.EnableEvents = False
Application.DisplayAlerts = False
Set objWs = Sheets(Array("Pivot_Member", "Pivot_Color"))
objWs.Copy
Set wbNeu = ActiveWorkbook
' Speicherort wählen und Dateinamen definieren/vorschlagen
sFilename = Application.GetSaveAsFilename(s, "Excel-Arbeitsmappe (*.xlsx), *.xlsx")
' Arbeitsmappe speichern
If sFilename > "Falsch" Then
wbNeu.SaveAs Filename:=sFilename, FileFormat:=xlOpenXMLWorkbook
wbNeu.Close
MsgBox "Datei erfolgreich gespeichert.", vbInformation, "Erledigt"
Else
MsgBox "Speichern abgebrochen."
wbNeu.Close SaveChanges:=False
End If
ERR_HANDLER:
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub


Danke vorab für Euren Input!

VG, Boris
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 einzelne Blätter in neuer Datei ohne Makros speichern
14.01.2025 01:33:01
Onur
Auf den ersten Blick sieht es eigentlich gut aus. Zum genauen Testen fehlt natürlich die Datei.
Nur
Application.EnableEvents = True/False

ist völlig überflüssig und
Application.DisplayAlerts = True

solltest du (genau wie eine Fehlerbehandlung wie "On Error ..." nur da einsetzen, wo du eine Meldung erwartest und danach sofort wieder deaktivieren, da du sonst evtl unerwartete Probleme bekommen kannst. Sonst ist es wie eine Vollnarkose, obwohl eine lokale Betäubung völlig ausreichen würde.
Anzeige
AW: 2 einzelne Blätter in neuer Datei ohne Makros speichern
14.01.2025 11:13:35
{Boris}
Hi Onur,

danke für Deine Antwort!
Die Events auszuschalten ist aber doch notwendig, weil sie nach dem Kopieren "feuern" und dann der Debugger anspringt, weil er ein Objekt (Tabelle19) im Worksheet_Activate-Ereignis findet, welches es in der neuen Datei nicht gibt. Daher unterdrücke ich damit das Ereignis.
Die Alerts erst dann auszuschalten, wenn es wirklich benötigt wird, werde ich aber umsetzen.

Danke Dir!

VG, Boris
Anzeige
AW: 2 einzelne Blätter in neuer Datei ohne Makros speichern
14.01.2025 01:36:00
Onur
Hi, Boris

Sorry - ich sehe jetzt erst, dass DU es bist.

Gruß
Onur
Leicht überarbeitet...
14.01.2025 11:45:57
{Boris}
Hi Onur,

...und von ein paar überflüssigen Variablen befreit, sieht es jetzt so aus:

Option Explicit

Sub Pivottabellen_in_neuer_Mappe_speichern()
'speichert die beiden Pivottabellen OHNE Makros
Dim wbNeu As Workbook
Dim sFilename As String
On Error GoTo ERR_HANDLER
sFilename = Range("A4").Text & "_Excel.xlsx" 'Das ist der Vorschlag für den neuen Dateinamen
Application.EnableEvents = False 'damit die Events in der neuen Mappe nicht feuern
Sheets(Array("Pivot_Member", "Pivot_Color")).Copy
Set wbNeu = ActiveWorkbook
' Speicherort und Dateinamen definieren/vorschlagen
sFilename = Application.GetSaveAsFilename(sFilename, "Excel-Arbeitsmappe (*.xlsx), *.xlsx")
' Arbeitsmappe speichern
If sFilename > "Falsch" Then
Application.DisplayAlerts = False
wbNeu.SaveAs Filename:=sFilename, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
wbNeu.Close
MsgBox "Datei erfolgreich gespeichert unter:" & vbLf & sFilename, vbInformation, "Melde Vollzug"
Else
MsgBox "Speichern abgebrochen.", vbInformation, "Abbruch"
wbNeu.Close SaveChanges:=False
End If
ERR_HANDLER:
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub


Danke Dir nochmal!

VG, Boris
Anzeige
AW: Leicht überarbeitet...
14.01.2025 15:59:00
Onur
Hi Boris,

Das letzte
Application.DisplayAlerts = True

ist überflüssig, da doppelt.
Gruß
Onur
AW: Leicht überarbeitet...
14.01.2025 17:12:35
{Boris}
Hi Onur,

das letzte Alerts ist ja nur Bestandteil der Fehlerroutine. Ich könnte es oben in dem If-Zweig weglassen (da der Code ja eh bis unten läuft) - aber besser doppelt als gar nicht ;-)

VG, Boris
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige