Makro zur Erstellung eines Ordners mit Jahreszahl
12.01.2018 11:55:11
Harry
ich arbeite derzeit an einer Exceltabelle für ein monatliches Lagerreporting. Dieses Reporting möchte ich nun weitestgehend automatisieren. Deshalb arbeite ich seit Kurzem mit dem Makro-Rekorder, da ich noch nie Makro-Programmierung zuvor betrieben habe.
Nun zu meinem File:
Ich würde gerne ein Makro haben, welches einen Speicherpfad überprüft, ob dieser bereits vorhanden ist. Falls es vorhanden ist, soll die Datei unter diesem Pfad mit einem Dateinamen abgespeichert werden. Ist der Ordner jedoch nicht vorhanden, so soll das Makro ebendiesen erstellen und erst dann die Datei abspeichern.
Eine Abfrage mit MsgBox ist nicht unbedingt notwendig!
Hier mal ein Teil des Codes für das Abspeichern der Datei.
Sub Makro7()
' Makro7 Makro
' Datum aktualisieren + Monitoring als pdf drucken + Excel Schliessen
' Nach dieser Zeile sollen die Befehl stehen, den Speicherpfad zu überprüfen und ggf. zu _
erstellen
Sheets("Tabellenblattxy").Select
' Hier aktualisiere ich noch da Datum in meinem Tabellenblatt
ActiveSheet.PageSetup.RightHeader = "&""Arial,Standard""&36" & _
Format(DateSerial(Year(Now()), Month(Now()) - 1, 1), " MMMM YYYY")
' Jetzt folgt der Speicherort
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\FirmaABC\Abteilung\Unterabteilung\Lagermonitoring\2018\Version_extern\" & _
Format(DateSerial(Year(Now()), Month(Now()) - 1, 1), "YYMM") & "_Monitoring_LagerABC.pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Sheets("Anderes_Tabellenblatt").Select
Range("A1").Select
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
Der Dateiname muss unbedingt die Datumsangabe vorneweg haben. Das funktioniert auch soweit einwandfrei.
Jetzt kommt der für mich knifflige Teil:
Die fettmarkierte Jahreszahl im Speicherpfad ändert sich jedes Jahr. Das heisst, dass ich hier ebenfalls eine variable Datumsangabe erhalte, bspw. sowas: "& Format(DateSerial(Year(Now()), Month(Now()) - 1, 1), "YYYY")
Damit das funktioniert muss auch in dem Befehl, den Speicherort anzulegen, eine solche variable _ Datumsangabe vorhanden sein. Ich habe mir dafür folgende, verschachtelte Befehle (erst einmal in separatem Makro) überlegt:
Sub SpeicherpfadeMonitoring()
' Dies soll der Jahresordner sein
Dim Ord As String
Ord = "C:\FirmaABC\Abteilung\Unterabteilung\Lagermonitoring\" & Format(DateSerial(Year( _
_
Now()), Month(Now()) - 1, 1), "YYYY") & ActiveCell.Value
If Dir(Ord, vbDirectory) = "" Then
MkDir Ord
Else
End If
' In dem jeweiligen Jahresordner muss dann der Unterordner "Version_extern" angelegt werden
Dim Ord2 As String
Ord2 = "C:\FirmaABC\Abteilung\Unterabteilung\Lagermonitoring\" & Format(DateSerial( _
_
Year(Now()), Month(Now()) - 1, 1), "YYYY")\Version_extern & ActiveCell.Value
If Dir(Ord2, vbDirectory) = "" Then
MkDir Ord2
Else
End If
End Sub
Beim zweiten Befehl (kursiv dargestellt) bekomme ich jedoch einen Laufzeitfehler '11' --> Division durch Null.
Kann mir bitte jemand helfen, hier eine Lösung zu finden?
Besten Dank im Voraus und viele Grüße
Harry