Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

Datei zerlegen - schnelle Lösung

Datei zerlegen - schnelle Lösung
06.12.2012 20:08:58
xxx999
Hallo,
Ich brauche Hilfe für folgende Probleme:
Aufgabe: 1 Excel-Datei (hat insgesammt 4 Sheets) nach Spalte A in Sheet 1 in mehrere Dateien zerlegen (am Ende ca. 500-600 Dateien) U.G. Makro erfüllt die Aufgabe einwandfrei.
2 Probleme müsste innerhalb diese Makro noch gelöst werden:
1) Sheet 2,3 und 4 müsste in den oben erzeugte Dateien auch als Sheet 2,3 und 4 ohne Veränderung kopiert werden (Namen der einzelne Sheets sollen auch nicht geändert werden)(Ergebnis sollte sein: ca. 500-600 Dateien a 4 Sheets)
2) Alle Formatierung aus der Original-Datei soll in die einzelne Dateien übernommen werden (Spaltenbreite, Zeilenumbrüche, Formels, Blattschutz... usw.)
Sub Zerlegen_Speichern()
Pfad = "C:\Lieferanten\"                                 'Speicherort festlegen (Ordner)
Dim rng As Range, rngCur As Range
Dim lngRow As Long
Application.ScreenUpdating = False
Set rngCur = Range("A1").CurrentRegion
rngCur.Sort _
key1:=Range("A2"), _
order1:=xlAscending, _
Header:=xlYes
lngRow = 2
Do Until IsEmpty(rngCur.Cells(lngRow, 1))
If rngCur.Cells(lngRow, 1)  rngCur.Cells(lngRow - 1, 1) Then
rngCur.AutoFilter _
field:=1, _
Criteria1:=rngCur.Cells(lngRow, 1)
Set rng = rngCur.SpecialCells(xlCellTypeVisible)
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
ws = rngCur.Cells(lngRow, 1)
ActiveSheet.Name = ws
rng.Copy Range("A1")
Lieferant = Sheets(2).Name                         'hier wird der Dateiname festgelegt
ActiveSheet.Copy
ActiveSheet.SaveAs Filename:=Pfad & Lieferant   'Datei in Pfad speichern
ActiveWorkbook.Close
Application.DisplayAlerts = False
ActiveSheet.Delete                              'Blatt löschen
Application.DisplayAlerts = True
End If
lngRow = lngRow + 1
Loop
Worksheets(1).Select
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = False
End Sub
Kann mir jemand dabei behilflich sein?
Vielen Dank.
xxx999

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

Betreff
Datum
Anwender
Anzeige
AW: Datei zerlegen - schnelle Lösung
07.12.2012 08:19:30
Klaus
Hi xxx999,
Ein Tip: In diesem Forum sprechen wir uns gerne mit Realnamen / Vornamen an. Wenn du ein Nick wählst, dass nicht so offensichtlich kein Vorname ist, wird dir eher geholfen (viele Leute ignorieren Nicks wie deinen).
ich strick jetzt deinen Code nicht um, darum nur der Ansatz:
irgendwo oben:
dim wkbOld as workbook
dim wkbNew as workbook
set wkbOld = activeworkbook
Das neue Workbook erstellt diese Zeile:
ActiveSheet.Copy
direkt danach:
set wkbNew = activeworkbook

das funktioniert, weil der Focus (also das active) nach erstellen des neuen Workbooks auf eben diesem liegt.
Jetzt kannst du dir den Code stricken den du brauchst, etwa so:

wkbOld.sheets("ImOriginal2").cells.copy
wkbnew.sheets("Tabelle2").range("A1").paste
wkbnew.sheets("Tabelle2").name = wkbOld.sheets("ImOriginal2").name

(natürlich x-mal für x Tabellen)
dieser Code kommt auch zwischen
activesheet.copy und activesheet.paste
Natürlich musst du hier ein paar Sachen dazu basteln, eventuell sheets im wkbNew erstellen damit es genug davon gibt (oder in deinem Excel einstellen, dass neue Dateien gleich mit 4 sheets erstellt werden).
Bei den Copy Paste befehlen spielst du ein bisschen mit pasteformats, pastevalues usw. rum, bis er dir so kopiert wie du möchtest.
nachher referenzierst du wieder auf wkbNew
wkbNew.SaveAs Filename:=Pfad & Lieferant   'Datei in Pfad speichern
wkbNew.Close

(obwohl das mit "active" warscheinlich auch geht, so ist es etwas besser lesbar)
Grüße,
Klaus M.vdT.

Anzeige
AW: Datei zerlegen - schnelle Lösung
07.12.2012 10:35:40
xxx999
Hallo,
ja das funktioniert...
Vielleicht könntest du mir noch verraten,wie man in die erste Sheet zurückspringt (Vor dem Speicherung) und den Blattschutz auf für diese Sheet aktiviert. Für Sheet 2,3 und 4 habe ich bereits den Blattschutz aktiviert und das geht.
...
Lieferant = Sheets(5).Name 'hier wird der Dateiname festgelegt
ActiveSheet.Copy
Set wkbNew = ActiveWorkbook
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
wkbOld.Sheets("WT").Cells.Copy
wkbNew.Sheets("Tabelle2").Range("A1").PasteSpecial
wkbNew.Sheets("Tabelle2").Name = wkbOld.Sheets("WT").Name
ActiveSheet.Protect Password:="bd12", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
wkbOld.Sheets("UL").Cells.Copy
wkbNew.Sheets("Tabelle3").Range("A1").PasteSpecial
wkbNew.Sheets("Tabelle3").Name = wkbOld.Sheets("UL").Name
ActiveSheet.Protect Password:="bd12", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
wkbOld.Sheets("LETyp").Cells.Copy
wkbNew.Sheets("Tabelle4").Range("A1").PasteSpecial
wkbNew.Sheets("Tabelle4").Name = wkbOld.Sheets("LETyp").Name
ActiveSheet.Protect Password:="bd12", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
wkbNew.SaveAs Filename:=Pfad & Lieferant 'Datei in Pfad speichern
wkbNew.Close
...
Danke.
xxx999

Anzeige
AW: Datei zerlegen - schnelle Lösung
07.12.2012 10:54:47
Klaus
Hi xxx999,
erste Sheet zurückspringt
sheet1.activate
(oder sheets("DerName").activate)
Blattschutz auf für diese Sheet aktiviert.
activesheet.protect
(und wieder aus mit activesheet.unprotect)
Meinen Einwand mit den Vornamen ignorierst du, dann rede ich 48 j37z7 /Vu² /V0(|-| 1337 /V\!7 |)!|2
G|2üß3,
|<|_4u5 /V\.\/|)7.

im falschen WKB (gedanklich)
07.12.2012 10:58:27
Klaus
4(|-| 50,
wkbOld.activate
sheet1.activate

/V\u55 35 /V47ü|21!(|-| 53!/V.
G|2üß3,
|<|_4u5 /V\.\/|)7.

AW: im falschen WKB (gedanklich)
07.12.2012 11:39:35
xxx999
Hallo,
sheet1 nimmt er nicht. Und die Name von Sheet1 ist immer variabel... Filename:=Pfad & lieferant
Gruß,
Zsuzsanna

Anzeige
AW: im falschen WKB (gedanklich)
10.12.2012 09:10:48
Klaus
Hi,
Und die Name von Sheet1 ist immer variabel
Das sollte aber gehen. Unterscheide:
sheets("VariablerName").activate
und
sheet1.activate
schau mal in deinem VBA-Explorer, wie das Sheet intern (nicht der name!) heisst. Vielleicht ist es bei dir ja sheet5 (ich kenn ja deine Datei nicht), dann musst du das natürlich anpassen.
Notfalls musst du dir den namen des sheets irgendwo zwischenspeichern (wksOldSheet = activesheet) und nachher direkt damit referenzieren (wksoldsheet.activate statt sheet1.activate)
Filename:=Pfad & lieferant
Das interessiert aber nicht für das sheet, sondern nur für das workbook. Hast du was durcheinander bekommen?

Anzeige
AW: im falschen WKB (gedanklich)
10.12.2012 12:35:22
Zsuzsanna
Hallo,
vielen Dank für all deine Hilfe.
Ich habe die richtige Weg jetzt doch gefunden.
Gruß,
Zsuzsanna

danke für die Rückmeldung! o.w.T.
10.12.2012 13:06:04
Klaus
.

AW: Datei zerlegen - schnelle Lösung
07.12.2012 09:36:56
xxx999
Hallo Klaus,
vielen Dank für deine Hilfe.
Ich habe jetzt mit der Problematik Sheet von alte Datei in die neu erzeugte Datei kopieren. Neue Sheet wird zwar erzeugt aber beim Einfügen hängt er sich auf.
wkbNew.Sheets("Tabelle2").Range("A1").Paste
Vielleicht ist was ganz banales, ich komme aber leider nicht drauf, was ich falsch mache. (VBA ist ziemlich Neuland für mich)
Danke.
xxx999
Hier nochmal das neue Makro:
Sub Zerlegen_Speichern()
Pfad = "C:\Lieferanten1\"                                 'Speicherort festlegen (Ordner)
Dim wkbOld As Workbook
Dim wkbNew As Workbook
Set wkbOld = ActiveWorkbook
Dim rng As Range, rngCur As Range
Dim lngRow As Long
Application.ScreenUpdating = False
Set rngCur = Range("A1").CurrentRegion
rngCur.Sort _
key1:=Range("A2"), _
order1:=xlAscending, _
Header:=xlYes
lngRow = 2
Do Until IsEmpty(rngCur.Cells(lngRow, 1))
If rngCur.Cells(lngRow, 1)  rngCur.Cells(lngRow - 1, 1) Then
rngCur.AutoFilter _
field:=1, _
Criteria1:=rngCur.Cells(lngRow, 1)
Set rng = rngCur.SpecialCells(xlCellTypeVisible)
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
ws = rngCur.Cells(lngRow, 1)
ActiveSheet.Name = ws
rng.Copy Range("A1")
Lieferant = Sheets(5).Name                         'hier wird der Dateiname festgelegt
ActiveSheet.Copy
Set wkbNew = ActiveWorkbook
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
wkbOld.Sheets("WT").Cells.Copy
wkbNew.Sheets("Tabelle2").Range("A1").Paste
wkbNew.Sheets("Tabelle2").Name = wkbOld.Sheets("WT").Name
wkbNew.SaveAs Filename:=Pfad & Lieferant   'Datei in Pfad speichern
wkbNew.Close
Application.DisplayAlerts = False
ActiveSheet.Delete                              'Blatt löschen
Application.DisplayAlerts = True
End If
lngRow = lngRow + 1
Loop
Worksheets(1).Select
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = False
End Sub

Anzeige
AW: Datei zerlegen - schnelle Lösung
07.12.2012 09:42:03
Klaus
Hi xxx999,
statt .paste versuch .pastespecial
Grüße,
|<|_4U5 /V\.\/|)7
(ich kann auch internet-cool mit einem HaxxOr-Pseudonym daherkommen)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige