Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenblätter in neue Datei hart kopieren

Tabellenblätter in neue Datei hart kopieren
21.08.2017 14:17:46
Makroschnacker
Guten Mittag liebes Forum,
ich möchte aus einer Excel-Datei mit 2 Tabellenblätter die Daten kopieren und in einer neuen Datei einfügen. Sie soll vom Format und den Daten her identisch sein, allerdings unverformelt, also es sollen nur die Werte kopiert werden. Anschließend soll die Datei unter einem bestimmten Namen abgespeichert werden.
Dies in VBA zu automatisieren kam mir von der Grundidee nicht schwer vor, allerdings ergaben meine bisherigen Ansätze immer nur Fehler. Könnt ihr mir da weiterhelfen?
Gruß Mr. M

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
21.08.2017 14:55:47
Michael
Hallo!
Sollen beide Blätter der Quell-Datei übertragen werden oder nur eines? Wie sind die Blätter benannt, die kopiert werden sollen?
Wie kommt es zu dem bestimmten Namen, unter dem die Ziel-Datei abgespeichert werden soll? Soll dieser fest im Code stehen, soll der aus einem Zellbereich erstellt werden, User-Eingabe...?
Lg
Michael
AW: Nachfrage
21.08.2017 15:17:42
Makroschnacker
Beide Tabellenblätter sollen übertragen werden. Sie heißen "Abflüsse" und "Versand".
Der bestimmte Name soll fest im Code stehen. Den würde ich dann noch einfügen.
Gruß M
Dann so...
21.08.2017 16:53:44
Michael
...
Sub a()
Const PFAD$ = "U:\" 'Speicher-Pfad, endet auf "\"!, anpassen
Const DNAME$ = "Test.xlsx" 'Dateiname + Typ (!), anpassen
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim WbZ As Workbook, i&
With WbQ
.Worksheets("Abflüsse").Copy
Set WbZ = ActiveWorkbook
.Worksheets("Versand").Copy _
after:=WbZ.Worksheets(WbZ.Worksheets.Count)
End With
With WbZ
For i = 1 To .Worksheets.Count
.Worksheets(i).UsedRange.Value = .Worksheets(i).UsedRange.Value
Next i
.SaveAs PFAD & DNAME, xlWorkbookNormal
.Close True 'Neue Datei schließen, optional, ggf. anpassen
End With
Set WbQ = Nothing: Set WbZ = Nothing
End Sub
Erforderliche Anpassungen sind im Code kommentiert.
LG
Michael
Anzeige
AW: Dann so...
25.08.2017 14:37:40
Makroschnacker
Hallo Michael,
erstmal vielen Dank für deinen Code! Er funktioniert fast komplett. Das harte Kopieren funktioniert, die Speicherung unter dem richtigen Namen auch. Allerdings scheitert nach dem Schließen der Datei der erneute Öffnungsversuch. Ich erhalte folgende Fehlermeldung:
"Die Datei '...' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung ungültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht."
Kannst du mir da weiterhelfen?
Gruß Mr. M
Naja...
25.08.2017 14:48:33
Michael
mysteriöser M,
...da ist die Frage, ob in Deinen Original-Blättern ebenfalls Makros gespeichert sind; also nicht nur in allgemeinen Modulen der Mappe oder im Modul der Mappe selbst, sondern ob in den betroffenen Tabellenblatt-Modulen von "Abflüsse" bzw. "Versand" Makros enthalten sind (bspw. Worksheet_SelectionChange o.Ä.).
Wenn dem so ist, ist das insofern problematisch, da Tabellenblatt-Codes beim Kopieren der Blätter in eine neue Mappe mitgenommen werden (anders als Codes in allgemeinen Modulen). Nachdem mein o.a. Code im Dateiformat ".xlsx" abspeichert, kommt es dann zu diesem Fehler, da die Tabellenblatt-Makros eine ".xlsm" verlangen würden.
Ein Workaround: Statt die Tabellenblätter zu kopieren, werden nur die Zell-Werte der jeweiligen Blätter in neue Blätter kopiert.
Wie sieht's also in Deinen Blättern aus? Läuft da Blatt-bezogener Code?
LG
Michael
P.S.: Nachdem Du relativ lange brauchst, um in diesem Faden zu antworten, ein Hinweis: nach gut einer Woche landen komplette Fäden im Archiv, und ein Antworten ist dann nicht mehr möglich. Ggf. musst Du diese Frage in einem neuen Faden nochmals aufmachen, wenn dieser Faden zu ist.
Anzeige
AW: Naja...
25.08.2017 15:05:29
Makroschnacker
Richtig erkannt. In den Tabellenblättern läuft Blatt-bezogener Code.
Nur die Zell-Werte zu kopieren, wäre wahrscheinlich der richtige Lösungsansatz.
Danke für den Tipp.
Dann versuch mal so...
25.08.2017 15:30:23
Michael
M,
Sub a()
Const PFAD$ = "U:\" 'Speicher-Pfad, endet auf "\"!, anpassen
Const DNAME$ = "Test.xlsx" 'Dateiname + Typ (!), anpassen
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim WbZ As Workbook, i&, j&
With Application
j = .SheetsInNewWorkbook
.SheetsInNewWorkbook = 2
End With
Set WbZ = Workbooks.Add
With WbZ
WbQ.Worksheets("Abflüsse").UsedRange.Copy
.Worksheets(1).Range("A1").PasteSpecial xlPasteValues
.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats
WbQ.Worksheets("Versand").UsedRange.Copy
.Worksheets(2).Range("A1").PasteSpecial xlPasteValues
.Worksheets(2).Range("A1").PasteSpecial xlPasteFormats
.SaveAs PFAD & DNAME, xlWorkbookNormal
.Close True
End With
Application.SheetsInNewWorkbook = j
Set WbQ = Nothing: Set WbZ = Nothing
End Sub
LG
Michael
Anzeige
AW: Naja...
25.08.2017 15:49:10
Makroschnacker
Hast du dafür einen Vorschlag zur Umsetzung?
Ja, wenn Du genau schaust ;-)...
25.08.2017 15:50:47
Michael
Herr M,
...siehst Du, dass ich Dir schneller geantwortet habe, als Deine Ungeduld vermutet hat. ;-)
AW: Tabellenblätter in neue Datei hart kopieren
21.08.2017 16:53:27
Robert
Hallo,
versuche mal folgenden Code
Sub TabellenKopieren()
Sheets(Array("Abflüsse", "Versand")).Copy
ActiveWorkbook.SaveAs Filename:= _
"D:\Test\NeuerName.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Sheets(1).UsedRange = ActiveWorkbook.Sheets(1).UsedRange.Value
ActiveWorkbook.Sheets(2).UsedRange = ActiveWorkbook.Sheets(2).UsedRange.Value
End Sub

Gruß
Robert
Anzeige

247 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige