Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datei teilen

Datei teilen
04.03.2008 10:53:00
Werner
Hallo zusammen,
ich bin auf der Suche nach einer Lösung für eine Problemstellung, die meine bescheidenen VBA-Kenntnisse leider übersteigt.
Eine xls-Datei mit einem Tabellenblatt soll in mehrere xls-Dateien aufgeteilt werden. Dabei sollen immer die Zeilen zu einer neuen Datei zusammengefasst werden, die in Spalte „F“ den gleichen Wert enthalten. In allen Dateien sollte natürlich die Überschriftenzeile erhalten bleiben. Die neu erstellten Dateien sollten als Namen jeweils den Wert der Spalte „F“ und den Zusatz „Vorgangsliste“ tragen (Beispiel: 56 Vorgangsliste) und im Ordner C:\Verwaltung\nach Betriebsteams gespeichert werden. Um es kurz zu formulieren: Aus einer Datei sollen in dem Beispiel neun Dateien werden (Ausgangsdatei + acht neue).
Hat jemand `ne Lösung für diese Nuss? Ich bin für jede Hilfe dankbar.
Gruß
Matthias
https://www.herber.de/bbs/user/50420.xls

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei teilen
04.03.2008 11:13:03
haw
Hallo Matthias,
eine ungetestetes Beispiel:

Sub Aufteilen()
Dim wsV As Worksheet, lz%, i%, T%, efz&, Datei$
Application.ScreenUpdating = False
Set wsV = ThisWorkbook.Worksheets("Vorgänge")
lz = wsV.Cells(Rows.Count, 1).End(xlUp).Row
wsV.Range("A1:H" & lz).Sort Key1:=wsV.Range("F2"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For i = 2 To lz
T = wsV.Cells(i, 6).Value
Datei = T & " Vorgangsliste.xls"
If T  wsV.Cells(i - 1, 6).Value Then
On Error Resume Next
wb.Close True
On Error GoTo 0
Workbooks.Add
Set wb = ActiveWorkbook
Set ws = ActiveSheet
wsV.Rows("1:2").Copy ws.Range("A1")
ws.Range("A1:H1").EntireColumn.AutoFit
Application.StatusBar = Datei & " wird gespeichert ..."
wb.SaveAs Filename:="C:\Verwaltung\nach Betriebsteams\" & Datei
Else
efz = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
wsV.Rows(i).Copy ws.Cells(efz, 1)
End If
Next i
On Error Resume Next
wb.Close True
On Error GoTo 0
wsV.Range("A1:H42").Sort Key1:=wsV.Range("F11"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
wsV.Range("A1:H" & lz).Sort Key1:=wsV.Range("A2"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.ScreenUpdating = True
End Sub


Gruß
Heinz

Anzeige
AW: Datei teilen
04.03.2008 11:56:00
Werner
Hallo Heinz,
bekomme leider einen "Laufzeitfehler 9" (Index außerhalb des gültigen Bereich) in dieser Zeile
Set wsV = ThisWorkbook.Worksheets("Vorgänge")
Fällt Dir dazu etwas ein?
Danke schon mal, dass ich überhaupt so schnell Hilfe bekomme.
Gruß
Matthias

AW: Datei teilen
04.03.2008 12:00:00
Erich
Hi Matthias,
in deiner Beispielmappe hieß das aufzuteilende Blatt "Vorgänge". Ist das jetzt nicht mehr so?
Dann musst du "Vorgänge" durch "DeinBlattname" ersetzen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Datei teilen
04.03.2008 11:57:00
Erich
Hallo Matthias,
und noch ne Variante:

Option Explicit
Sub Aufteilen()
Dim wksT As Worksheet, varF, lngVon As Long, zz As Long, intC As Integer
Application.ScreenUpdating = False
Sheets("Vorgänge").Copy
Set wksT = ActiveSheet
wksT.UsedRange.Sort Key1:=Range("F2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
lngVon = 2
varF = Cells(2, 6)
zz = 2
With wksT
While Not IsEmpty(.Cells(zz + 1, 6))
While varF = .Cells(zz + 1, 6)
zz = zz + 1
Wend
Workbooks.Add xlWBATWorksheet
.Rows(1).Copy Cells(1, 1)
.Range(.Rows(lngVon), .Rows(zz)).Copy Cells(2, 1)
For intC = 1 To 8
Columns(intC).ColumnWidth = wksT.Columns(intC).ColumnWidth
Next intC
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
ActiveWorkbook.SaveAs "C:\Verwaltung\" & varF & " Vorgangsliste.xls"
ActiveWorkbook.Close
zz = zz + 1
lngVon = zz
varF = .Cells(zz, 6)
Wend
wksT.Parent.Close False
End With
Application.ScreenUpdating = True
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Datei teilen
04.03.2008 13:38:56
Werner
Hallo Erich,
super, deine Lösung läuft fehlerfrei.
Da ich den Makro jedoch auch gern für andere Dateien verwenden möchte noch zwei Fragen:
Kann die Spalte nach der geteilt und hinterher auch benannt werden soll auch variabel gestaltet werden bzw. was muss ich ändern, wenn es mal nicht die Spalte "F" ist? (Tabelle mit mehr Spalten und Zeilen)
Gibt es ein Möglichkeit den Namen des Tabellenblattes aus dem Makro zu nehmen? Das Makro soll einfach das "aktuelle" Tabellenblatt nehmen.
Gruß
Matthias
P.S. Wie ich den Speicherpfad verändere, hab ich schon heraus bekommen.

Anzeige
AW: Datei teilen
04.03.2008 15:30:39
Erich
Hallo Matthias,
freut mich, dass es funzt! jier eine Version, bei der das gerade aktive Blatt aufgeteilt wird.
Spalte und Verzeichnis kannst du oben hinter "Const ..." festlegen:

Option Explicit
Sub Aufteilen()
Dim wksT As Worksheet, varF, lngVon As Long, zz As Long, intC As Integer
Dim intT As Integer
Const strSpalte As String = "F"
Const strVerz As String = "C:\Verwaltung\"   ' mit \" am Ende
intT = Columns(strSpalte).Column
Application.ScreenUpdating = False
ActiveSheet.Copy                             ' das aktive Blatt wird verwendet
Set wksT = ActiveSheet
wksT.UsedRange.Sort Key1:=Cells(2, intT), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
lngVon = 2
varF = Cells(2, intT)
zz = 2
With wksT
While Not IsEmpty(.Cells(zz + 1, intT))
While varF = .Cells(zz + 1, intT)
zz = zz + 1
Wend
Workbooks.Add xlWBATWorksheet
.Rows(1).Copy Cells(1, 1)
.Range(.Rows(lngVon), .Rows(zz)).Copy Cells(2, 1)
For intC = 1 To 8
Columns(intC).ColumnWidth = wksT.Columns(intC).ColumnWidth
Next intC
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
ActiveWorkbook.SaveAs strVerz & varF & " Vorgangsliste.xls"
ActiveWorkbook.Close
zz = zz + 1
lngVon = zz
varF = .Cells(zz, intT)
Wend
wksT.Parent.Close False
End With
Application.ScreenUpdating = True
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Datei teilen
04.03.2008 16:17:00
Werner
Erich, Du bist ein Gott (jedenfalls für mich) !!!
Du glaubst gar nicht, wieviel Arbeit Du mir heute und in Zukunft abgenommen hast.
Schön, dass sich Menschen wie Du an solchen Foren beteiligen.
Bis zum nächsten Mal.
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige