Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Nur die letzten 2 Jahre in MsgBox anzeigen
#1
Hallo!

Ich lasse mir eine Liste von Namen inkl. Datums in einer MsgBox anzeigen.
Nachdem die Liste zulange ist und mir deshalb nicht alle Werte in der MsgBox angezeigt werden, würde es mir auch reichen, wenn nur die Namen inkl. Datum der letzten 2 Jahre (immer ab dem heutigen Datum) angezeigt werden.
Das Datum steht in der Spalte C:C.

Hier einmal mein bestehender Code:

Code:
Sub nichtausgezahlteAuszahlungenindenletzten24Monaten()

With ThisWorkbook.Worksheets("Auszahlungen")

Dim rng As Range, strg As String
For Each rng In Range("A:A")
If rng.Value <> "" And rng.Offset(0, 6).Value = "" Then strg = strg & vbLf & rng.Value & ":  " & Format(rng.Offset(0, 2).Value, "DD.MM.YYYY")
Next

MsgBox "alle fehlenden Auszahlungen " & String(1, vbNewLine) & _
"inkl. Beantragungsdatum:" & String(2, vbNewLine) & _
strg

End With

End Sub


Ich hoffe, dass mir jemand helfen kann.

LG
Thomas
Excel Version 2016
Antworten Top
#2
Hi,

(20.04.2023, 10:02)dertommy schrieb: Das Datum steht in der Spalte G:G.
...
Code:
...
If rng.Value <> "" And rng.Offset(0, 6).Value = "" Then strg = strg & vbLf & rng.Value & ":  " & Format(rng.Offset(0, 2).Value, "DD.MM.YYYY")
...

Ich behaupte mal, dass das Datum in Spalte C steht. Ansonsten macht dein Code keinen Sinn. 32

Code:
...
If rng <> "" And rng.Offset(0, 6) = "" And rng.Offset(0,2) > (Date-730) And rng.Offset(0,2) <= Date Then _
        strg = strg & vbLf & rng & ":  " & Format(rng.Offset(0, 2), "DD.MM.YYYY")
...

Aber so ganz nebenbei gesagt: Was bringt dir die MsgBox? Damit kann man doch nicht wirklich arbeiten. Ich würde hier den Autofilter bevorzugen. Dann kann man nämlich die Namen und Daten bequem kopieren und wieder irgendwo einfügen um z.B. Überweisungen zu tätigen.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
Danke sehr, du hast mir sehr geholfen.
Ja, tut mir leid, das Datum zur Überprüfung steht in der Spalte C. Ich habe es oben in meinem ersten Beitrag soeben ausgebessert.
Mir gefällt einfach eine Msgbox besser.
Excel Version 2016
Antworten Top
#4
Hallo!

Ich möchte dieses Thema nochmals aufgreifen, weil ich noch ein Problem habe. Ich möchte mir nun zusätzlich die Anzahl anzeigen lassen. Leider wird in der MsgBox immer 0 bei der Anzahl angezeigt, hier mein aktueller Code:


Code:
Sub nichtausgezahlteAuszahlungenindenletzten24Monaten()

With ThisWorkbook.Worksheets("Auszahlungen")

Dim rng As Range, strg As String
Set adr1 = Worksheets("Auszahlungen").Range("G:G")
Set adr2 = Worksheets("Auszahlungen").Range("C:C")
Anz = Application.WorksheetFunction.CountIfs(adr1, "", _
    adr2, "> (Date - 730)", _
    adr2, "<= Date")
For Each rng In Range("A:A")
If rng <> "" And rng.Offset(0, 6) = "" And rng.Offset(0, 2) > (Date - 730) And rng.Offset(0, 2) <= Date Then _
        strg = strg & vbLf & rng & ":  " & Format(rng.Offset(0, 2), "DD.MM.YYYY") & ":  € " & Format(rng.Offset(0, 3), "#,##0.00")
Next

MsgBox Anz & " fehlende Auszahlungen in den letzten 2 Jahren:" & String(2, vbNewLine) & _
strg

End With

End Sub

Ich hoffe, dass mir jemand weiter helfen kann.

LG
Thomas
Excel Version 2016
Antworten Top
#5
Hi,

da Date ein VBA-Befehl ist, solltest du den außerhalb der "-Zeichen verwenden. Es sei denn du willst die Buchstaben "Date" wirklich da stehen haben (was allerdings keinerlei Sinn macht).

EDIT:
Außerdem solltest du dir angwöhnen sämtliche Variablen zu deklarieren. Dazu am besten Option Explicit am Anfang jedes Moduls einfügen.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#6
Hallo!

Danke für den Hinweis, ich bekomme es aber leider nicht zusammen sondern nur einen Syntaxfehler.
Hier mein Code:

Code:
Anz = Application.WorksheetFunction.CountIfs(adr1, "", _
    adr2, ">" (Date - 730), _
    adr2, "<=" Date)


Irgendetwas mache ich noch falsch. Ich hoffe, dass mir jemand helfen kann.
Excel Version 2016
Antworten Top
#7
Hi,

irgendwie scheinst du nie etwas zu lernen. Zur Erinnerung: Wenn du Strings aus mehreren Teilen zusammensetzen willst, darfst du die nicht einfach hintereinander knallen, sondern du musst einen bestimmten Operator zwischen die Teile setzen. Welchen? Denk nach, oder bemühe zur Not die externe Kapazitätserweiterungen namens WWW.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#8
(20.04.2023, 10:37)dertommy schrieb: Mir gefällt einfach eine Msgbox besser.

Stimmt!
Die kann man ja prima abtippen!
Natürlich nur, wenn Excel nicht den ganzen Bildschirm einnimmt.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(26.04.2023, 14:31)RPP63 schrieb: Natürlich nur, wenn Excel nicht den ganzen Bildschirm einnimmt.

...und jemand die Programmlogik entwickelt und C&P-ready bereitstellt.
Antworten Top
#10
Um mal auf den Vorschlag von Helmut zurück zu kommen.
VBA iVm einer MsgBox ist hier mehr als fragwürdig.
So etwas regelt man mit dem Autofilter.

Ausgangsposition:
Unsortierte Daten in Spalte C
Die letzten 2 Jahre werden mittels bedingter Formatierung hervorgehoben =($C2>EDATUM(HEUTE();-24)*($G2="")

ACG
1#Datumerledigt
2101.04.2023
3226.03.2020XXX
4324.04.2022
5417.05.2021
6523.03.2021
7627.05.2022
8712.11.2022XXX
9811.06.2020
10921.01.2021XXX
111006.10.2021XXX
121109.10.2020
131213.12.2021
141319.11.2022
151424.02.2023XXX
161522.06.2021
171630.03.2022
181728.05.2020
191805.01.2022
201927.12.2022XXX
212002.08.2020

Zellebedingte Formatierung...Format
A21: ($C2>EDATUM(HEUTE();-24))*($G2="")abc

Jetzt sortiere ich Spalte C absteigend und filtere auf die Farbe der bed. Form.:
ACG
1#Datumerledigt
2101.04.2023
51319.11.2022
7627.05.2022
8324.04.2022
91630.03.2022
101805.01.2022
111213.12.2021
131522.06.2021
14417.05.2021

Wenn es denn unbedingt VBA sein muss, kann man sich diese Schritte per Makrorekorder aufzeichnen.

In einem aktuellen Excel kann man das auch per Formel erschlagen:
Nur in I2 steht
IJ
1#Datum
2101.04.2023
31319.11.2022
4627.05.2022
5324.04.2022
61630.03.2022
71805.01.2022
81213.12.2021
91522.06.2021
10417.05.2021

ZelleFormel
I2=SPALTENWAHL(SORTIEREN(FILTER(A2:G21;(C2:C21>EDATUM(HEUTE();-24))*(G2:G21=""));3;-1);1;3)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste