mirkolando
Goto Top

VBA - Jahr Anpassen bei Finanzjahrwechsel

Moin zusammen,

ich möchte gerne, dass sich in einer bestimmten Zelle (A1) oder Messagebox das Datum je nach dem aktuellen Finanzjahr anpasst. Unser Finanzjahr geht vom 01.04.JJ bis zum 31.03.JJ.

Als Beispiel: wenn das heutige Datum zwischen dem 01.4.2023 und dem 31.03.2024 liegt, soll in der Zelle A1 das Datum 01.04.204 stehen. Ist das heutige Datum beispielsweise der 03.04.2023 oder der der 01.02.2024 muss in der Zelle 01.04.2024 stehen.

Sub JahrAnpassen2()

Dim MeinDatum As Date
Dim NeuesDatum As Date

    'Aktuelles Datum verwenden  
    MeinDatum = #6/3/2024#

    'Überprüfen, ob das aktuelle Datum zwischen dem 1. April und dem 31. März des nächsten Jahres liegt  
    If (Month(MeinDatum) < "04") Or  
    (Month(MeinDatum) = 4 And Day(MeinDatum) = 1)Then
    NeuesDatum = DateSerial(Year(MeinDatum), 3, 31)
    Else
    NeuesDatum = DateSerial(Year(MeinDatum) + 1, 3, 31)
    End If
    'Das Ergebnis in ein Feld oder eine Zelle schreiben (hier MsgBox als Beispiel)  
    MsgBox "Das angepasste Datum ist: " & NeuesDatum  
End Sub

Aktuell erhalte ich in den folgenden Zeilen die Fehleranzeige: Fehler beim Kompilieren: Syntaxfehler
If (Month(MeinDatum) < "04") Or
(Month(MeinDatum) = 4 And Day(MeinDatum) = 1)Then

Freue mich über Tipps face-smile

VG Mirko

Content-ID: 4110528030

Url: https://administrator.de/forum/vba-jahr-anpassen-bei-finanzjahrwechsel-4110528030.html

Ausgedruckt am: 24.12.2024 um 19:12 Uhr

mayho33
mayho33 02.11.2023 aktualisiert um 12:18:27 Uhr
Goto Top
Hi,

Warum immer hard coded? Warum nicht sowas?
'Aktuelles Datum verwenden    
    MeinDatum = Year(Date)

Siehe auch:
https://www.classanytime.com/mis333k/sjdatetime.html
SlainteMhath
SlainteMhath 02.11.2023 aktualisiert um 12:19:44 Uhr
Goto Top
Moin,

Zeile 10 und 11 müssen zusammen in einer Zeile stehen.

lg,
Slainte

/EDIT: und
 (Month(MeinDatum) < "04")   
macht keinen Sinn bei einer Funktion die einen Integer (wenn auch als Variant) zurück gibt.
mirkolando
mirkolando 02.11.2023 um 12:59:44 Uhr
Goto Top
Zitat von @mayho33:

Hi,

Warum immer hard coded? Warum nicht sowas?
'Aktuelles Datum verwenden    
    MeinDatum = Year(Date)

Siehe auch:
https://www.classanytime.com/mis333k/sjdatetime.html

Das war nur zum testing. So kann ich einfach verschiedene Daten probieren
mirkolando
mirkolando 02.11.2023 um 13:06:23 Uhr
Goto Top
Zitat von @SlainteMhath:

Moin,

Zeile 10 und 11 müssen zusammen in einer Zeile stehen.

lg,
Slainte

/EDIT: und
 (Month(MeinDatum) < "04")   
macht keinen Sinn bei einer Funktion die einen Integer (wenn auch als Variant) zurück gibt.


Zitat von @SlainteMhath:

Moin,

Zeile 10 und 11 müssen zusammen in einer Zeile stehen.

lg,
Slainte

/EDIT: und
 (Month(MeinDatum) < "04")   
macht keinen Sinn bei einer Funktion die einen Integer (wenn auch als Variant) zurück gibt.

Das ändert leider nichts face-sad
code
mayho33
mayho33 02.11.2023 um 13:42:09 Uhr
Goto Top
Zitat von @mirkolando:

Zitat von @mayho33:

Hi,

Warum immer hard coded? Warum nicht sowas?
'Aktuelles Datum verwenden    
    MeinDatum = Year(Date)

Siehe auch:
https://www.classanytime.com/mis333k/sjdatetime.html

Das war nur zum testing. So kann ich einfach verschiedene Daten probieren

Verstehe! Versuche mal das:
Sub ShowDates()
    Dim Year, startDate, endDate, currentDate
    Year = Format(Date, "yyyy")  
    startDate = Format("01.04." & Year - 1, "dd/mm/yyyy")  
    endDate = Format("31.03." & Year, "dd/mm/yyyy")  
    currentDate = Format(Date, "dd/mm/yyyy")  
    
    Cells(1, 1).Value = "busines year START"  
    Cells(2, 1).Value = startDate
    
    Cells(1, 2).Value = "busines year END"  
    Cells(2, 2).Value = endDate
    
    Cells(1, 3).Value = "Comparsion"  
    If ((currentDate >= startDate) And (currentDate <= endDate)) Then
        Cells(2, 3).Value = startDate
    Else
        Cells(2, 3).Value = "oOhhh!! Geschäftsjahr verschlafen!"  
    End If
End Sub
em-pie
em-pie 02.11.2023 um 13:45:52 Uhr
Goto Top
Moin,

und weil ich auch eine Idee habe face-smile
OPTION EXPLICIT
ON ERROR Resume NEXT

DIM DateFromCell 
DIM BY 'BusinessYear / Geschäftsjahr  

DateFromCell = "28.11.2023"    

if(Month(DateFromCell) < 4) Then 
    BY = Year(DateAdd("yyyy", -1, DateFromCell))  
else 
    BY = Year(DateFromCell)
end if

wscript.echo DateFromCell
wscript.echo BY

wie du den 01.04. darein bekommst, sei dann dir überlassen.


BTW: hast du noch mehr VBA-Code in dem Dokument oder ist es das einzige, denn das GJ würde man innerhalb von Excel auch komplett ohne VBA ermittelt bekommen.
em-pie
em-pie 02.11.2023 um 13:49:59 Uhr
Goto Top
@mayho33
du hast einen Fehler in Zeile 3-5
Wenn er am 31.12.2023 ist, wäre nach deiner Theorie das Geschäftsjahr vom 01.04.2022 bis 31.03.2023.
Das "aktuelle" Datum würde somit nicht zum Geschäftsjahr passen, obwohl er sich faktisch darin befände.
mayho33
mayho33 02.11.2023 aktualisiert um 14:18:22 Uhr
Goto Top
Zitat von @em-pie:

@mayho33
du hast einen Fehler in Zeile 3-5
Wenn er am 31.12.2023 ist, wäre nach deiner Theorie das Geschäftsjahr vom 01.04.2022 bis 31.03.2023.
Das "aktuelle" Datum würde somit nicht zum Geschäftsjahr passen, obwohl er sich faktisch darin befände.

Aber genau so will der TO das doch haben:
Als Beispiel: wenn das heutige Datum zwischen dem 01.4.2023 und dem 31.03.2024 liegt, soll in der Zelle A1 das Datum 01.04.204 stehen.
Aha! Ich glaube ich habe den Schreibfehler am Ende "...das Datum 01.04.204 stehen" fehlinterpretiert.

Dann also so:
Sub ShowDates()
    Dim Year, startDate, endDate, currentDate
    Year = Format(Date, "yyyy")  
    startDate = Format("01.04." & Year - 1, "dd/mm/yyyy")  
    endDate = Format("31.03." & Year, "dd/mm/yyyy")  
    currentDate = Format(Date, "dd/mm/yyyy")  
    
    Cells(1, 1).Value = "business year START"  
    Cells(2, 1).Value = startDate
    
    Cells(1, 2).Value = "business year END"  
    Cells(2, 2).Value = endDate
    
    Cells(1, 3).Value = "Comparsion"  
    If ((currentDate >= startDate) And (currentDate <= endDate)) Then
        Cells(2, 3).Value = DateAdd("yyyy", 1, startDate)  
    Else
        Cells(2, 3).Value = "oOhhh!! Geschäftsjahr verschlafen!"  
    End If
End Sub

Und bevor da jetzt kommt, dass ich in Zeile XY auch noch was anders machen sollte 😜😉:
Wie der TO sich das dann am Ende zusammenbastelt ist eh seine Sache. Es geht, denke ich, ums Vergleichen und die technische Umsetzung. Ich habe das ja auch nur schnell hingerotzt, als anschauliches Beispiel.

Aber Danke für den Hinweis 😉
SlainteMhath
SlainteMhath 02.11.2023 um 15:01:31 Uhr
Goto Top
Quote from @mirkolando:

Zeile 10 und 11 müssen zusammen in einer Zeile stehen.

Das ändert leider nichts face-sad
code

Uff, so schwer isses doch nicht, oder? Natürlich muss das "THEN" auch mit auf die gleiche Zeile wie das "IF"...
mirkolando
mirkolando 02.11.2023 um 17:01:46 Uhr
Goto Top
Zitat von @mayho33:

Zitat von @em-pie:

@mayho33
du hast einen Fehler in Zeile 3-5
Wenn er am 31.12.2023 ist, wäre nach deiner Theorie das Geschäftsjahr vom 01.04.2022 bis 31.03.2023.
Das "aktuelle" Datum würde somit nicht zum Geschäftsjahr passen, obwohl er sich faktisch darin befände.

Aber genau so will der TO das doch haben:
Als Beispiel: wenn das heutige Datum zwischen dem 01.4.2023 und dem 31.03.2024 liegt, soll in der Zelle A1 das Datum 01.04.204 stehen.
Aha! Ich glaube ich habe den Schreibfehler am Ende "...das Datum 01.04.204 stehen" fehlinterpretiert.

Dann also so:
Sub ShowDates()
    Dim Year, startDate, endDate, currentDate
    Year = Format(Date, "yyyy")  
    startDate = Format("01.04." & Year - 1, "dd/mm/yyyy")  
    endDate = Format("31.03." & Year, "dd/mm/yyyy")  
    currentDate = Format(Date, "dd/mm/yyyy")  
    
    Cells(1, 1).Value = "business year START"  
    Cells(2, 1).Value = startDate
    
    Cells(1, 2).Value = "business year END"  
    Cells(2, 2).Value = endDate
    
    Cells(1, 3).Value = "Comparsion"  
    If ((currentDate >= startDate) And (currentDate <= endDate)) Then
        Cells(2, 3).Value = DateAdd("yyyy", 1, startDate)  
    Else
        Cells(2, 3).Value = "oOhhh!! Geschäftsjahr verschlafen!"  
    End If
End Sub

Und bevor da jetzt kommt, dass ich in Zeile XY auch noch was anders machen sollte 😜😉:
Wie der TO sich das dann am Ende zusammenbastelt ist eh seine Sache. Es geht, denke ich, ums Vergleichen und die technische Umsetzung. Ich habe das ja auch nur schnell hingerotzt, als anschauliches Beispiel.

Aber Danke für den Hinweis 😉

Vielen Dank für die Hilfe!
Ich habe ein paar Ergänzungen gemacht aber ich glaube jetzt passt es. Oder erkennt hier noch jemand einen Fehler den ich übersehe 🙈

Sub dynamicParameter()
Dim Year As String, startDate As Date, endDate As Date, currentDate As Date
Year = Format(Date, "yyyy")
startDate = DateSerial(Year, 4, 1)
endDate = DateSerial(Year + 1, 3, 31)
currentDate = Date 'Hier das spezifische Datum eingeben
Cells(1, 1).Value = "Geschäftsjahr START"
Cells(2, 1).Value = startDate
Cells(1, 2).Value = "Geschäftsjahr ENDE"
Cells(2, 2).Value = endDate
Cells(1, 3).Value = "Parameter"
If (currentDate >= startDate) And (currentDate <= endDate) Then
Cells(2, 3).Value = DateSerial(Year, 4, 1)
Else: Cells(2, 3).Value = "Geschäftsjahr verpennt"
End If
End Sub
mayho33
mayho33 02.11.2023 aktualisiert um 18:02:33 Uhr
Goto Top
Tu uns allen doch bitte einen Gefallen und setze den Code in die entsprechendnen Code-Tags. So wird es wesentlich leserlicher.

Adminstrator.de - Formatierungen in den Beiträgen

Schaut soweit gut aus würde ich sagen.