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-Key: 4110528030

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

Printed on: July 21, 2024 at 22:07 o'clock

Member: mayho33
mayho33 Nov 02, 2023 updated at 11:18:27 (UTC)
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
Member: SlainteMhath
SlainteMhath Nov 02, 2023 updated at 11:19:44 (UTC)
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.
Member: mirkolando
mirkolando Nov 02, 2023 at 11:59:44 (UTC)
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
Member: mirkolando
mirkolando Nov 02, 2023 at 12:06:23 (UTC)
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
Member: mayho33
mayho33 Nov 02, 2023 at 12:42:09 (UTC)
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
Member: em-pie
em-pie Nov 02, 2023 at 12:45:52 (UTC)
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.
Member: em-pie
em-pie Nov 02, 2023 at 12:49:59 (UTC)
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.
Member: mayho33
mayho33 Nov 02, 2023 updated at 13:18:22 (UTC)
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 😉
Member: SlainteMhath
SlainteMhath Nov 02, 2023 at 14:01:31 (UTC)
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"...
Member: mirkolando
mirkolando Nov 02, 2023 at 16:01:46 (UTC)
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
Member: mayho33
mayho33 Nov 02, 2023 updated at 17:02:33 (UTC)
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.