Supportnet / Forum / Tabellenkalkulation
Mehrere Sheets in neue Mappe kopieren
Frage
Hallo,
ich habe folgendes Problem, ich habe eine Excel Mappe mit einem Sheet mit Zahlen und Formeln und 18 Sheets mit Diagrammen. Nun würde ich gerne die Zahlenwerte ohne Formeln in eine neue Datei kopieren. Das realisiere ich über folgendes Makro:
[code]
Sub ohne Werte()
Dim Neuer_Dateiname
Dim i As Integer
Rem kopiert ganzes Blatt in neue Mappe, mit Formeln
ActiveSheet.Copy
Rem in neuer Mappe alle Zellen kopieren
Cells.Copy
Rem in neuer Mappe A1 wählen
Range("A1").Select
Rem dort nur die Werte einfügen
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Rem Kopiermodus beenden (Laufrahmen beenden)
Application.CutCopyMode = False
Rem s.o.
Range("A1").Select
Rem Speichernabfrage
i = MsgBox("SpeichernAktion kann nicht rückgängig gemacht werden!" & Chr(13) & _
"" & Chr(13) & _
"Sicher? Dann OK, sonst ABBRECHEN" & Chr(13), 1 + vbExclamation, "Festwerte in neue Datei speichern")
Rem wenn Abbrechen angeklickt, makroende
If i = 2 Then Exit Sub
Rem SpeichernDialog aufrufen
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:="", fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname
End Sub
[\code]
Nur leider kopiert mir das Makro nur mein Sheet mit den Zahlenwerten und nicht die restlichen Sheets.
Da die Namen der Sheets das Datum, die sich ständig ändern, enthalten, kann ich es nicht mit
[code]Sheets(Array("Zahlen", "Diagramm vom ...", "... " ... )).Select [/code]
machen.
Kann mir jemand einen Tipp geben?
Vielen Dank
Werner
Antwort 1 von coros
Hallo Werner,
wenn DU das Makro durch eine Schleife laufen läßt, würden Dir alle Blätter kopiert. Als Beispiel:
Mit obiger Schleife werden alle Blätter einer Datei angesprochen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
wenn DU das Makro durch eine Schleife laufen läßt, würden Dir alle Blätter kopiert. Als Beispiel:
Dim iSheet A Integer
For iSheet = 1 to Sheets.Count
'hier dann Deine Befehle zum Kopieren
NextMit obiger Schleife werden alle Blätter einer Datei angesprochen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Werner_abc
Hallo Oliver,
den Gedanken mit der Schleifen hatte ich auch schon. Jedoch habe ich das Problem, wenn ich die Schleife so einfüge:
Dann erzeugt er mir nur endlos viele Mappen.
Müsste ich nicht die bestehende Mappe akitviern, dort das erste Sheet kopieren und dann in die neue Mappe springen und es dort einfügen. Und das sooft, bis alle Sheets kopiert sind. Und das ohne die Bezeichnungen der einzelen Sheets zu benutzen.
Oder steh ich einfach auf dem Schlauch und ich check ned wie ich deine Schleifen einfügen muss.
Gruß
Werner
den Gedanken mit der Schleifen hatte ich auch schon. Jedoch habe ich das Problem, wenn ich die Schleife so einfüge:
Dim iSheet A Integer
For iSheet = 1 to Sheets.Count
ActiveSheet.Copy
Next
Dann erzeugt er mir nur endlos viele Mappen.
Müsste ich nicht die bestehende Mappe akitviern, dort das erste Sheet kopieren und dann in die neue Mappe springen und es dort einfügen. Und das sooft, bis alle Sheets kopiert sind. Und das ohne die Bezeichnungen der einzelen Sheets zu benutzen.
Oder steh ich einfach auf dem Schlauch und ich check ned wie ich deine Schleifen einfügen muss.
Gruß
Werner
Antwort 3 von coros
Hallo Werner,
der nachfolgende Code kopiert Dir alle Tabellenblätter aus der Datei "Quelldatei.xls" in die Datei mit dem Namen "Zieldatei.xls". Die Dateinamen musst Du natürlich anpassen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
der nachfolgende Code kopiert Dir alle Tabellenblätter aus der Datei "Quelldatei.xls" in die Datei mit dem Namen "Zieldatei.xls". Die Dateinamen musst Du natürlich anpassen.
Dim iSheet As Integer
For iSheet = 1 To Workbooks("Quelldatei.xls").Sheets.Count
Workbooks("Quelldatei.xls").Sheets(iSheet).Copy _
Workbooks("Zieldatei.xls").Sheets(1)
NextMfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von nighty
hi all :-)
gehe ueber den index der tabellen
gruss nighty
gehe ueber den index der tabellen
gruss nighty
Sheets(Array(1, 3)).SelectAntwort 5 von Werner_abc
Hallo,
also ich habe das jetzt sowol über die Schleife als auch über das Array versucht. Ohne Erfolg.
Beim Array markiert mir zwar die angebenen Sheets aber es wird immer nur das Sheet mit den Zahlenwerten kopiert. Woran liegt das?
So sieht momentan der Code aus:
Wenn ich die Sheets mit Select auswähle sollte der nächste befehl sie doch alle kopieren, oder?
also ich habe das jetzt sowol über die Schleife als auch über das Array versucht. Ohne Erfolg.
Beim Array markiert mir zwar die angebenen Sheets aber es wird immer nur das Sheet mit den Zahlenwerten kopiert. Woran liegt das?
So sieht momentan der Code aus:
Sheets(Array(1, 4, 7)).Select
ActiveSheet.Copy
Wenn ich die Sheets mit Select auswähle sollte der nächste befehl sie doch alle kopieren, oder?
Antwort 6 von nighty
hi all :-))
hier hast du 3 worksheets ueber ein array selectiert
Sheets(Array(1, 4, 7)).Select
warum benutzt du es jetzt nicht ?
ActiveSheet.Copy
es wird mit ActiveSheet das zur zeit active kopiert und das array waere nun sinnlos
daher ersetze ActiveSheet durch Selection
gruss nighty
hier hast du 3 worksheets ueber ein array selectiert
Sheets(Array(1, 4, 7)).Select
warum benutzt du es jetzt nicht ?
ActiveSheet.Copy
es wird mit ActiveSheet das zur zeit active kopiert und das array waere nun sinnlos
daher ersetze ActiveSheet durch Selection
gruss nighty

