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

Gesamtdatei splitten mittels Makro

Forumthread: Gesamtdatei splitten mittels Makro

Gesamtdatei splitten mittels Makro
20.04.2017 09:30:21
Marcus
Hallo zusammen,
ich benutze aktuell ein Makro um eine große Gesamtdatei zu splitten. Dabei verwendet das Makro den Kenner in Spalte A. Dies funktioniert grundsätzlich auch einwandfrei:
Option Explicit
Sub copyBranch()
Dim objSht As Worksheet
Dim rngAll As Range, rngKrit As Range
Dim vntTmp As Variant, vntValues As Variant
Dim lngI As Long
Dim CalculationMode As Long, UpdateLinks As Long
On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.EnableEvents = False
CalculationMode = .Calculation
.Calculation = xlManual
UpdateLinks = .AskToUpdateLinks
.AskToUpdateLinks = False
.DisplayAlerts = False
End With
With Sheets("Splitten")
Set rngAll = .Range("A1").CurrentRegion
rngAll.Rows(1).Copy rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1)
Set rngKrit = rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1).Resize(2, rngAll.Columns.Count)
End With
vntTmp = rngAll.Columns(1).Offset(1, 0).Resize(rngAll.Rows.Count - 1, 1)
vntValues = toArrayUnique(vntTmp)
For lngI = 0 To UBound(vntValues)
rngKrit.Cells(2, 1).Formula = "=""=" & vntValues(lngI) & """"
Set objSht = ThisWorkbook.Worksheets.Add
rngAll.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=rngKrit, _
CopyToRange:=objSht.Range("A1"), _
Unique:=False
objSht.Move
ActiveSheet.Name = Cells(1, 1) & " " & vntValues(lngI)
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_" & Cells(1, 1) & " " & vntValues(lngI) & ".xlsx", FileFormat:=51
ActiveWorkbook.Close
Set objSht = Nothing
Next
MsgBox "Es wurden " & UBound(vntValues) + 1 & " Dateien exportiert!"
rngKrit = ""
ErrorHandler:
With Err
If .Number 0 Then
MsgBox "Fehler in Prozedur:" & vbTab & "'copyBranch'" & vbLf & String(25, "-") & _
vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
"Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
.Description & vbLf, 81968, "VBA - Fehler in Prozedur - copyBranch", .HelpFile, .HelpContext
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalculationMode
.DisplayAlerts = True
.AskToUpdateLinks = UpdateLinks
.CutCopyMode = False
.StatusBar = False
End With
Set rngAll = Nothing
Set rngKrit = Nothing
End Sub

Private Function toArrayUnique(Field As Variant, Optional Sort As Integer = 1) As Variant
'Sort unsortiert = 0, sortiert A-Z = 1, sortiert Z-A = -1
Dim objArrayList As Object
Dim lngR As Long, lngC As Long
On Error GoTo ErrExit
Set objArrayList = CreateObject("System.Collections.Arraylist")
With objArrayList
For lngR = LBound(Field, 1) To UBound(Field, 1)
For lngC = LBound(Field, 2) To UBound(Field, 2)
If Not .Contains(Trim(Field(lngR, lngC))) Then
If Field(lngR, lngC) "" Then .Add Trim(Field(lngR, lngC))
End If
Next
Next
If Sort 0 Then .Sort
If Sort toArrayUnique = .toArray
End With
Exit Function
ErrExit:
toArrayUnique = -1
End Function

Ich habe jedoch folgende Probleme:
* Wenn es ein Tabellenblatt "Hilfstabelle" gibt, dann soll das Makro dieses Tabellenblatt mit in die neue Datei kopieren ohne es zu splitten oder zu löschen. (Hintergrund: Dropdown-Hilfstabelle für Tabellenblatt 1 und Tabellenblatt 2.)
* Wenn ich ein zweites Tabellenblatt habe (das nicht Hilftabelle heisst), soll das Makro die Datei identisch splitten, wie im ersten Tabellenblatt.
Kann mir hier jm helfen?
Viele Grüße
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gesamtdatei splitten mittels Makro
20.04.2017 09:59:49
ChrisL
Hi Marcus
Deinen unformatierten Code zu analysieren und eine Beispieldatei nachbauen wird wohl niemand tun. Hier mal ein Muster wie man die Unterscheidungen machen könnte:
Sub t()
If ThisWorkbook.Worksheets.Count = 1 Then
MsgBox "Es existiert nur eine Tabelle"
ElseIf CheckTabelle("Hilfstabelle") Then
MsgBox "Es existiert eine Hilfstabelle"
Else
MsgBox "Mehrere Tabellen aber keine Hilfstabelle"
End If
End Sub

Private Function CheckTabelle(strTB As String) As Boolean
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
If WS.Name = strTB Then
CheckTabelle = True
Exit Function
End If
Next WS
End Function

cu
Chris
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige