Hallo
zuerst habe ich mal deinen Makro Recorder Code bereinigt. Das zweite Makro ist voll funktionfähig, wurde bei mir zur Probe getestet. Statt Autofilter verwende ich eine For Next Schleife, und kopiere immer nur den Bereich des entsprechenden Mitarbeiters. In der Variablen EAdr = End Adresse kannst du selbst festlegen wieviele Spalten mit Personaldaten kopiert werden sollen. Zur Zeit wird Spalte A-C kopiert.
In der With Anweisung musst du unbedingt noch den Tabellen Namen deiner Personalliste angeben. Ich haber sie zum testen "Personal" genannt.
mfg Nobody
Sub Makro2()
Dim PersNr As Variant
ActiveSheet.Range("$A$1:$AS$2332").AutoFilter Field:=7, Criteria1:="xxxx"
Selection.SpecialCells(xlCellTypeVisible).Copy
PersNr = Range("g2") 'VOR ADD laden, sonst lädst du aus falschem Workbook!
Workbooks.Add
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:="C:\Users\*\Desktop\Test\" & PersNr
End Sub
Sub Personaldatei_erstellen()
Dim MtaName As String
Dim PersNr As Variant, a As Long
Dim AAdr As String, EAdr As String
Dim AC As Range, j As Long, lz1 As Long
'** Hier bitte den Namen deiner Personal Tabelle angeben!!
With ThisWorkbook.Worksheets("Personal")
'LastZell in Personalliste suchen Spalte A
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row
'1. Personal Nummer + Anfangs Adresse setzen
PersNr = .Range("A2").Value
MtaName = .Range("B2").Value '** diese Zeile kann gelöscht werden! Mitarbeiter Name!
AAdr = "A2" '1.Copy Adr.
Application.ScreenUpdating = False
On Error GoTo Fehler
'Schleife zum abarbeiten aller Personal Nummern
For j = 2 To lz1
If .Cells(j + 1, 1) <> PersNr Then
'** zu kopierende Spaltenbreite selbst festlegen
EAdr = .Cells(j, 3).Address '3=Spalte C
.Range(AAdr, EAdr).Copy 'Bereich A-C kopieren
Workbooks.Add
ActiveSheet.Paste
'Neue Datei mit Pers. Nummer + Mitarbeiter Name speichern
ActiveWorkbook.SaveAs Filename:="C:\Users\*\Desktop\Test\" & PersNr & " " & MtaName
ActiveWorkbook.Close savechanges:=False
'nächste Personal Nummer + Mitarbeiter Name laden
PersNr = .Cells(j + 1, 1)
MtaName = .Cells(j + 1, 2)
AAdr = .Cells(j + 1, 1).Address
End If
Next j
End With
Exit Sub
Fehler: MsgBox PersNr & " unerwarteter Fehler aufgetreten" & vbLf & Error()
End Sub
|