AW: Komplette Kundenliste in einzelne Listen aufteilen
20.03.2024 19:17:26
HenryKurz
Sub ErstelleKundenExcelDateien()
Dim wsKundenliste As Worksheet
Dim rngKunden As Range
Dim rngKunde As Range
Dim Kundennummer As String
Dim Kundennamen As String
Dim NeueDatei As Workbook
Dim Kopfzeile As Range
Dim QuellZeile As Range
Dim NeueZeile As Range
Dim Speicherpfad As String
Dim AbbruchZeit As Date
' Speicherpfad anpassen
Speicherpfad = "C:\Users\hkurz\Downloads\TEST\Neuer Ordner\"
' Arbeitsblatt mit Kundenliste
Set wsKundenliste = ThisWorkbook.Sheets("Kundenliste")
Set rngKunden = wsKundenliste.Range("A2:A" & wsKundenliste.Cells(Rows.Count, 1).End(xlUp).Row)
' Dauer in Sekunden festlegen
Dim duration As Long
duration = 10 ' 1 Minute
' Startzeit für den Timer
AbbruchZeit = Now + TimeSerial(0, 0, duration)
' Schleife durch alle Kunden
For Each rngKunde In rngKunden
Kundennummer = rngKunde.Value
Kundennamen = rngKunde.Offset(0, 1).Value ' Annahme: Kundennamen in Spalte B
' Prüfen, ob Datei bereits vorhanden ist
If Dir(Speicherpfad & Kundennummer & " " & Kundennamen & ".xlsx") = "" Then
' Neue Excel-Datei erstellen
Set NeueDatei = Workbooks.Add
NeueDatei.SaveAs Speicherpfad & Kundennummer & " " & Kundennamen & ".xlsx"
' Kopfzeile aus der Quelldatei übernehmen (Annahme: Kopfzeile in Zeile 1)
Set Kopfzeile = wsKundenliste.Rows(1)
Kopfzeile.Copy Destination:=NeueDatei.Sheets(1).Rows(1)
Else
' Datei bereits vorhanden, öffnen
Set NeueDatei = Workbooks.Open(Speicherpfad & Kundennummer & " " & Kundennamen & ".xlsx")
End If
' Zeilen aus der Quelldatei übernehmen (Annahme: Daten beginnen in Zeile 2)
For Each QuellZeile In wsKundenliste.Range("A2:A" & wsKundenliste.Cells(Rows.Count, 1).End(xlUp).Row)
If QuellZeile.Value = Kundennummer Then
Set NeueZeile = NeueDatei.Sheets(1).Cells(NeueDatei.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
QuellZeile.EntireRow.Copy Destination:=NeueZeile
End If
Next QuellZeile
NeueDatei.Close SaveChanges:=True ' Speichern und schließen der Datei
' Überprüfen, ob die Abbruchzeit erreicht ist
If Now >= AbbruchZeit Then
Dim userResponse As String
userResponse = InputBox("Möchtest du das Skript abbrechen? (ja/nein)", "Abbruchabfrage")
If LCase(userResponse) = "ja" Then
MsgBox "Skript wird abgebrochen."
Exit Sub
ElseIf LCase(userResponse) = "nein" Then
duration = InputBox("In wie vielen Sekunden möchtest du erneut gefragt werden?", "Wartezeit festlegen")
AbbruchZeit = Now + TimeSerial(0, 0, duration)
Else
MsgBox "Ungültige Eingabe. Bitte antworte mit 'ja' oder 'nein'."
End If
End If
Next rngKunde
End Sub
Das habe ich von der KI erstellen lassen.
Hat ein paar Korrekturen benötigt, weil da irgendwas nicht ganz sauber ist. Habe mir Für meine Testzwecke auch die Funktion eines Stops einbauen lassen. Also nicht wundern.
Gibt sogar Kommentare ganz gut an. Den Ordnerpfad hat er immer seprerat gelassen, bis ich ihm direkt meinen genannt habe, weil es mir auf die Nerven ging es immer abändern zu müssen