Jeden Monat immer zwischen dem 3. Und 9. Des Monats wird der aktuelle Bericht des Vormonats erstellt.
Dieser Bericht benötigt Daten die in Unterordner nach Jahr archiviert sind ( z. B. 2021 2020 2019 2018).
Beispiel: Anfang Februar 2021 soll jetzt der Bericht für Januar 2021 erstellt werden.
Das Makro muss also auf dem Datenlaufwerk in den Ordner 2021 schauen und dort die Datei suchen mit dem Namen 2021_01_Januar.xlsx.
Die Datendateien fangen immer mit dem Jahr, gefolgt vom Monat an. Dahinter kann es auch schon mal andere Namen geben. Deswegen arbeite ich mit dem Platzhalter *
Wenn die Datei gefunden wurde, wird sie in den Ordner wo das Exceltool liegt kopiert und umbenannt in DatenAktuell.xlsx.
Zum vergleich für die Auswertung des Vormonats wird aber auch nach der des Vormonats vor einem Jahr gesucht. In diesem Fall im Ordner 2020 die Datei 2020_01_Januar.xlsx.
Diese Zahlen werden nachher gegenübergestellt zum Vergleich.
Momentan mache ich das über einen Weg der bestimmt nicht sehr elegant ist und hoffe hier Hilfe zu bekommen.
Beispiel zu Ermittlung des Jahres des Vormonats:
strPfad1 = "E:\EXCEL_TEST\010_KPIs\" 'Quelle
strPfad1 = strPfad1 & Format(Date - 28, "yyyy") & "\"
sFileAktuell = Dir(strPfad1 & Format(Date - 28, "yyyy_mm") & "*.xlsx") 'Datei suchen
If Dir(strPfad1 & Format(Date - 28, "yyyy_mm") & "*.xlsx") "" Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.copyfile strPfad1 & sFileAktuell, strPfad2, True
Name ThisWorkbook.Path & "\Daten\" & sFileAktuell As ThisWorkbook.Path & "\Daten\ DatenAktuell.xlsx"
Else
MsgBox "Aktuelle Daten sind nicht im Ordner vorhanden. Bitte prüfen."
Exit Sub
End If
'Beispiel zu Ermittlung des Jahres des Vormonats des Vorjahres:
strPfad1 = "E:\EXCEL_TEST\010_KPIs\" 'Quelle
strPfad1 = strPfad1 & Format(Date - 393, "yyyy") & "\"
sFileAktuell = Dir(strPfad1 & Format(Date - 393, "yyyy_mm") & "*.xlsx") 'Datei suchen
If Dir(strPfad1 & Format(Date - 393, "yyyy_mm") & "*.xlsx") "" Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.copyfile strPfad1 & sFileAktuell, strPfad2, True
Name ThisWorkbook.Path & "\Daten\" & sFileAktuell As ThisWorkbook.Path & "\Daten\ DatenAktuell.xlsx"
Else
MsgBox "Aktuelle Daten sind nicht im Ordner vorhanden. Bitte prüfen."
Exit Sub
End If
Wie ihr seht rechne ich beim Vormonat einfach 28 Tage vom aktuellen Datum runter um irgendwo im Vormonat zu sein.
Das gleiche für den Monat vor einem Jahr, wo ich 393 Tage zurück rechne.
Geht das nicht auch einfacher?
Gruß
Gerald