29.05.2019, 12:24
Hallo,
ich habe ein Makro, dass mir eine Tabelle augfrund der Einträge in einer Spalte auf mehrere Tabellenblätter aufteilt, inkl. der Zeilen vor der Spaltenüberschrift.
Was muss geändert werden, damit nicht neue Tabellenblätter sondern neue Dateien im gleichen Verzeichnis wie die Originaldatei erstellt werden?
Danke!
ich habe ein Makro, dass mir eine Tabelle augfrund der Einträge in einer Spalte auf mehrere Tabellenblätter aufteilt, inkl. der Zeilen vor der Spaltenüberschrift.
Was muss geändert werden, damit nicht neue Tabellenblätter sondern neue Dateien im gleichen Verzeichnis wie die Originaldatei erstellt werden?
Code:
Sub Verantwort_Aufteilung()
Dim AnmerkTab As Worksheet
Dim wshTabelle As Worksheet
Dim lngZeile As Long
Dim lngLetzte As Long
Dim rngZelle As Range
Dim Spaltenüberschrift As Variant
Set AnmerkTab = ActiveWorkbook.Worksheets("AnmerkIR")
Spaltenüberschrift = "Verantwortliche(r)"
With AnmerkTab
.ListObjects("Anm").Sort.SortFields.Clear
.ListObjects("Anm").Sort.SortFields.Add _
Key:=Range("Anm[[#All],[Verantwortliche(r)]]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With
With AnmerkTab.ListObjects("Anm").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.ListObjects("Anm").Range.AutoFilter Field:=6, Criteria1:="N"
With AnmerkTab
Set rngZelle = .UsedRange.Find(Spaltenüberschrift, LookAt:=xlWhole)
If Not rngZelle Is Nothing Then
lngZeile = rngZelle.Row + 1
Application.ScreenUpdating = False
Do
On Error Resume Next
Set wshTabelle = Worksheets(CStr(.Cells(lngZeile, rngZelle.Column)))
On Error GoTo 0
If wshTabelle Is Nothing Then
Worksheets.Add After:=Worksheets(Worksheets.Count)
Set wshTabelle = Worksheets(Worksheets.Count)
wshTabelle.Name = .Cells(lngZeile, rngZelle.Column)
.Rows("1:" & rngZelle.Row).Copy wshTabelle.Range("A1")
ActiveSheet.DrawingObjects.Select 'Schaltflächen löschen
Selection.Delete
ActiveWindow.DisplayGridlines = False 'Gitternetzlinien ausblenden
End If
lngLetzte = IIf(IsEmpty(wshTabelle.Cells(wshTabelle.Rows.Count, rngZelle.Column)), _
wshTabelle.Cells(wshTabelle.Rows.Count, rngZelle.Column).End(xlUp).Row, _
wshTabelle.Rows.Count) + 1
.Rows(lngZeile).Copy
wshTabelle.Range("A" & lngLetzte).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Range("A1").Select
lngZeile = lngZeile + 1
Set wshTabelle = Nothing
Loop While .Cells(lngZeile, rngZelle.Column) <> ""
Set rngZelle = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True
End If
End With
With AnmerkTab.ListObjects("Anm")
If .ShowAutoFilter Then
If .AutoFilter.FilterMode Then
.AutoFilter.ShowAllData
End If
End If
.Sort.SortFields.Clear
.Sort.SortFields.Add _
Key:=Range("Anm[[#All],[lfd." & Chr(10) & "Nr.]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortTextAsNumbers
End With
With AnmerkTab.ListObjects("Anm").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.Goto AnmerkTab.Range("A1")
End Sub
LG Herbert
Windows 10
Office 365
Windows 10
Office 365