Ich habe meine Rechnungsübersicht in welcher diverse Sachen stehen, Rechnungsnummer, Betrag, Fälligkeit etc... im 2. Blatt habe ich meine Mahnliste welche aus der Rechnungsübersicht mittels Firmennamen gefilter wird.
auf dem Blatt "Mahnliste" in der Spalte E, F und G stehen Datum wann bereits der Kunde gemahnt wurde. Wenn nun der nächste Mahnprozess fällig ist möchte ich in der Mahnliste ( Spalte E, F und G) die neuen Mahndatum ergänzen und danach mittels Button die ganze Liste ( oder wenn möglich) nur die SPalten E, F und G in die Quelldatei ( zugeordnet zur korrekten Rechnungsnummer) zurückspeichern, oder kopieren.
Ich werde aber einfach nicht schlau wie ich dann diese Daten an die richtige Position, respektive in die richtige Zelle zur korrekten Rechnung zurückspeichern kann.
Ziel ist dass wenn ich das nächste mal die Mahnliste öffne, die neuen Daten dann auch aufgelistet werden damit ich eine bessere Übersicht habe wann was gemahnt wurde des gesuchten Kunden.
26.02.2026, 10:06 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2026, 10:08 von Egon12.)
Hallo Mamami,
zum Verständnis anhand Rechn. Nr. 2:
Rechnungsdatum: 16.01.2025 Fälligkeitsdatum: 30.01.2025 1. Mahnung vor Fälligkeitsdatum? am 27.01.2025 2. Mahnung: 28.02.2025 3. Mahnung...: 30.03.2025
ist es in der Schweiz üblich die 1. Mahnung vor dem Fälligkeitsdatum zu verschicken, oder soll die 1. Mahnung eine Zahlungserinnerung ohne Rechtsfolgen sein?
Zur Mahnliste: Diese soll vermutlich nur 1. Bedingung unbezahlte Rechnungen zeigen und 2. Bedingung 1. Mahnung ausgelöst. Wenn Rechnungen bezahlt sind soll der Eintrag aus der Mahnliste verschwinden?
Wenn dies so richtig ist und du ja O365 nutzt braucht es kein VBA. Es reicht die Funktion FILTER() und SPALTENWAHL() und HSTAPELN(). Dies wäre dann im Blatt Mahnliste in Zelle A12 so:
hier eine VBA-Lösung zum Übertragen der 3 Datumswerte:
Code:
Sub Datum_uebertragen() Dim lng_rnr As Long Dim lng_startzeile As Long Dim rng_fund As Range Dim obj_ws_mahnung As Worksheet Dim obj_ws_rechnung As Worksheet
Set obj_ws_mahnung = ThisWorkbook.Worksheets("Mahnliste") Set obj_ws_rechnung = ThisWorkbook.Worksheets("Rechnungsübersicht")
lng_startzeile = 12
With obj_ws_mahnung Do Until .Cells(lng_startzeile, 1) = "" lng_rnr = .Cells(lng_startzeile, 1) Set rng_fund = obj_ws_rechnung.Columns(2).Find(lng_rnr, LookIn:=xlValues) If Not rng_fund Is Nothing Then obj_ws_rechnung.Cells(rng_fund.Row, 12) = .Cells(lng_startzeile, 5) obj_ws_rechnung.Cells(rng_fund.Row, 13) = .Cells(lng_startzeile, 6) obj_ws_rechnung.Cells(rng_fund.Row, 14) = .Cells(lng_startzeile, 7) Else MsgBox "Rechnungsnummer: " & lng_rnr & " nicht gefunden" End If lng_startzeile = lng_startzeile + 1 Loop End With
Set obj_ws_mahnung = Nothing Set obj_ws_rechnung = Nothing End Sub
Uwe, ich habe da nur so so lala Daten eingetragen in die Musterdatei, natürlich auch in der Schweiz nicht üblich..) jedoch ist genau das was Regina geschrieben hat, dass was ich gesucht habe, trotzdem Danke ich Dir und kann dies bestimmt für andere Dinge noch gut gebrauchen.
Liebe Regina, vielen Dank, Deine Lösung ist für mich perfekt und super umsetzbar.
Wie immer eine mega tolle Gruppe, von welcher ich schon sehr viel lernen konnte und Verstehen konnte.
Ich wünsche allen einen tollen Tag und geniesst die Sonne...
nachdem ich meinen Fehler mit Hilfe der Kollegen korrigieren konnte hier noch eine Lösung. Bei dieser Lösung wird, wie gewünscht, das Datum aus der Mahnliste zurückgeschrieben. Das gilt aber nur für die Spalten 2. und 3. Mahnung! Die 1. Mahnung bleibt unverändert. Wenn dir das weiterhilft kannst du den Code übernehmen. Er steht im Sheet Mahnliste.
28.02.2026, 21:12 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2026, 21:13 von Egon12.)
Hallo,
da ja O365 genutzt wird habe ich das Filtern mit der Funktion FILTER() im Evaluate verwendet, was natürlich sehr wenig Code braucht und sehr schnell ist. Dann habe ich aus der Zieltabelle ein Listobjekt gemacht.
das wäre dann so:
Code:
Sub Daten_abrufen() Dim arr, treffer& treffer = WorksheetFunction.CountIfs(Range("Tabelle1[NAme Firma]"), Tabelle2.Range("NAMEFIRMA"), Range("Tabelle1[bezahlt/offen]"), "offen") arr = Evaluate("FILTER(Tabelle1, (Tabelle1[NAme Firma]=""" & Tabelle2.Range("NAMEFIRMA") & """)*(Tabelle1[bezahlt/offen]=""offen""))") arr = Application.Index(arr, Evaluate("row(1:" & UBound(arr, 1) & ")"), Array(1, 4, 6, 5, 11, 12, 13)) Application.EnableEvents = False With Tabelle2.ListObjects(1) If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete If treffer = 1 Then .ListRows.Add.Range.Resize(1, 7) = arr Else .ListRows.Add.Range.Resize(UBound(arr), 7) = arr End If End With Application.EnableEvents = True End Sub