yuki13
Goto Top

Excel-Makro

Hallo Zusammen!! face-smile

Ich bin nicht so fit in Excel Makros und wollte mich hier erkundigen, ob mir jemand helfen kann face-smile

Ich habe folgendes Problem...
Ich habe eine Excel Liste (1.Tabellenblatt) in Spalte A steht jeweils der Nachname & in Spalte B steht dann der Status, ob diese Datei schon angelegt wurde ( soll dann durch das Makro beschrieben werden) & habe eine riesige Datei (2. Tabellenblatt) die immer wieder variiert und aus dieser soll das Makro nach dem Nachnamen aus Spalte A (/ oder nach einer Kundennummer in Spalte XY) die Datensätze aus Tabellenblatt 2 zu diesem Nachnamen in eine neue Excel Datei - unter diesem Nachnamen speichern. ( Oder mal statt dem Nachnamen nach der Kundennummer filtern)

Hier zu wurde schonmal ein Makro geschrieben, jedoch ist funktioniert dieses nicht mehr richtig bzw. wie kann man das anpassen, dass wenn neue Datensätze reinkommen es weiterhin funktioniert.

Wie gesagt ich verstehe da leider nicht viel von deshalb weiss ich nicht woran es hakt... Sorry wenn es so offensichtlich ist ^^

VIELEN DANK für jegliche Hilfe!

LG Yuki!

Hier das bisherige Makro:
Sub DatenKopieren()

l_z = 1
l_ende = 0
l_pfad = ActiveWorkbook.Path
l_seite = "Rohdaten"
l_steuerung = "Steuerung"
l_spalte = 2

ActiveWorkbook.Save
Sheets(l_seite).Select
Range("A" & l_z).Select
Selection.AutoFilter

Do
l_z = l_z + 1
Sheets(l_steuerung).Select
Range("A" & l_z).Select
l_vz = ActiveCell
If l_vz = "" Then
l_ende = 1

Else
Sheets(l_seite).Select
Selection.AutoFilter Field:=l_spalte, Criteria1:=l_vz, Operator:=xlAnd
Range(Selection, Selection.End(xlDown)).Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _
l_pfad & "\" & l_vz & ".xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close
Sheets(l_steuerung).Select
Range("B" & l_z).Select
ActiveCell.FormulaR1C1 = "Fertig!"
End If
Loop Until l_ende = 1
L_1 = MsgBox(("Dateien sind erstellt!"), vbExclamation + vbOKOnly, "Bin Fertig!")
End Sub

Content-ID: 305531

Url: https://administrator.de/contentid/305531

Ausgedruckt am: 23.11.2024 um 03:11 Uhr

Clijsters
Clijsters 27.05.2016 um 16:38:24 Uhr
Goto Top
Hallo yuki,

Fange erstmal folgendermaßen an:
Bearbeite den Titel deiner Frage, sodass er etwas aussagekräftiger wird. So finden potenzielle Beantworter ihren Weg hierhin.

Prüfe, ob die Beschreibung deiner Frage auch für jemanden verständlich ist, der dein Tabellenblatt nie gesehen hat.

Verwende Code Tags, Umbrüche und was sonst noch beim Lesen hilft.

Ich persönlich verwtehe nicht ganz, was du zu beschreiben versuchst und empfinde den Codeausschnitt als sehr unübersichtlich.

Danke

Beste Grüße
Dominique
colinardo
Lösung colinardo 30.05.2016, aktualisiert am 31.05.2016 um 10:46:52 Uhr
Goto Top
Hallo Yuki!
Hier mal ein Beispiel für dein Vorhaben so wie ich es anhand deiner knappen Informationen interpretiert habe:
FilterDataAndCreateWorkbooks_305531.xlsm

Hier noch der kommentierte Code aus dem Demo-Sheet:
Sub FilterAndCopyData()
    Dim wsList As Worksheet, wsData As Worksheet, strExportPath As String, strFilename As String, fso As Object, intColumn As Integer
    
    'Sheets festlegen  
    Set wsList = Sheets("Steuerung")  
    Set wsData = Sheets("Rohdaten")  
    
    'Exportpfad für die Dateien  
    strExportPath = ThisWorkbook.Path
    
    'Objekte  
    Set fso = CreateObject("Scripting.FileSystemObject")  
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    With wsList
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            'Wenn Name in der Liste noch nicht bearbeitet wurde ...  
            If cell.Value <> "" And cell.Offset(0, 1).Value = "" Then  
                With wsData
                    'AutoFilter zurücksetzen  
                    .UsedRange.AutoFilter
                    
                    'Lege Suchspalte fest je nachdem ob es eine Kundennummer(Numerisch) ist oder nicht (Name)  
                    intColumn = IIf(IsNumeric(cell.Value), 3, 1)
                    
                    ' Nur wenn Daten des Users vorhanden  
                    If Not (.Columns(intColumn).Find(cell.Value)) Is Nothing Then
                        'Filtere die Datentabelle anhand des Namens/Kundennummer  
                        .UsedRange.AutoFilter intColumn, cell.Value
                        
                        'Kopiere nur die Sichtbaren zellen der Liste  
                        .UsedRange.SpecialCells(xlCellTypeVisible).Copy
                        With Workbooks.Add
                            'Inhalt in neues WB einfügen  
                            .Sheets(1).Range("A1").PasteSpecial xlPasteValues  
                            'Spalten an Inhalt anpassen (optische Hilfe)  
                            .Sheets(1).UsedRange.EntireColumn.AutoFit
                            'Exportdateiname  
                            strFilename = strExportPath & "\" & cell.Value & ".xlsx"  
                            ' Wenn Datei noch nicht existiert Speichere und schließe das neue Workbook, ansonsten  
                            ' frage nach ob sie überschrieben werden soll  
                            If Not fso.FileExists(strFilename) Then
                                .SaveAs strFilename
                                .Close True
                            Else
                                If MsgBox("Datei '" & strFilename & "' existiert bereits. Soll sie überschrieben werden?", vbExclamation Or vbYesNo) = vbYes Then  
                                    .SaveAs strFilename
                                    .Close True
                                Else
                                    .Close False
                                End If
                            End If
                        End With
                    End If
                End With
                ' Notiere den Status des Namens in der Liste  
                cell.Offset(0, 1).Value = "Fertig."  
            End If
        Next
    End With
    
    'cleanup  
    Set fso = Nothing
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "Fertig", vbInformation  
End Sub
Grüße Uwe
yuki13
yuki13 31.05.2016 um 08:36:12 Uhr
Goto Top
Hi Dominique,

Vielen Dank für deine Tipps!

Werde ich in Zukunft beachten face-smile

LG
Yuki
yuki13
yuki13 31.05.2016 um 08:39:33 Uhr
Goto Top
Hallo Uwe,

Vielen Dank für Deine Hilfe!

Ich teste das jetzt an meiner Datei mal aus face-smile

LG Yuki face-smile
yuki13
yuki13 31.05.2016 um 09:15:01 Uhr
Goto Top
Hi nochmal face-smile

Vielen lieben Dank nochmal für Deine Lösung.
Hat prima funktioniert.

Hab eine Frage und zwar - geht es das nur für die Namen die im 1. und 2. Tabellenblatt vorkommen die Dateien erstellt werden?

Also habe im ersten Tabellenblatt mehrere Namen welche, aber die nicht im 2.TB vorkommen.
Möchte aber nur von den Namen Dateien erstellen die im ersten und zweiten Tabellenblatt vorkommen.

Und kann man da vielleicht sowas wie eine Wildcard machen, dass wenn Vor- und Nachname in der einen Tabelle und in der anderen zB nur der Nachname, dass es die richtige findet?

Vielen Dank!

Beste Grüße
Yuki
colinardo
Lösung colinardo 31.05.2016 um 10:47:54 Uhr
Goto Top
Also habe im ersten Tabellenblatt mehrere Namen welche, aber die nicht im 2.TB vorkommen.
Möchte aber nur von den Namen Dateien erstellen die im ersten und zweiten Tabellenblatt vorkommen.
Kein Problem eine einfache If-Abfrage mit einer Suche, ist oben nachgetragen (auch im Demo-Sheet)

Grüße Uwe
yuki13
yuki13 01.06.2016 um 08:53:40 Uhr
Goto Top
Suuuper!!!
Vieeeelen lieben Dank! face-smile

LG
Yuki! face-smile