Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro zur Erstellung eines Ordners mit Jahreszahl

Makro zur Erstellung eines Ordners mit Jahreszahl
12.01.2018 11:55:11
Harry
Hallo zusammen,
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 12:12:09
Fennek
Hallo,
eigentlich ist es nicht unbedingt für wenig geübte VBA-Anwender, aber folgender Code prüft die Existenz eines Ordners und , falls er nicht existiert, wird er angelegt.

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll"  ( _
ByVal lpPath As String) As Long
' Legt einen kompletten Verzeichnispfad an
Private Sub Command1_Click()
Dim Retval As Long
' Verzeichnis erstellen
Retval = MakeSureDirectoryPathExists("c:\windows\Desktop\Test Verzeichnis\VB Api Helpline\")
If Retval = 0 Then
MsgBox "Das Verzeichnis konnte nicht angelegt werden"
Else
MsgBox "Das Verzeichnis wurde angelegt !"
End If
End Sub
Grundkenntnisse in API's wären vorteilhaft.
mfg
Anzeige
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:00:37
Harry
Hallo Fennek,
deine Idee ist gut, allerdings wenn ich das jetzt richtig lese, muss doch für diesen Befehl der exakte Pfad bereits angelegt sein, richtig? Aber das möchte ich gerne vermeiden bzw. umgehen.
Dieser Pfad mit der Jahreszahl soll ja erst entstehen, wenn ich das Makro (ist mit einer Schaltfläche verbunden) ausführe. Besteht der Pfad bereits dann prüft er das ja einfach und erkennt, dass der Ordner bereits existiert. Also macht er weiter mit dem Abspeichern der Datei.
Aber nochmal: wichtig ist mir, dass der Pfad erstmalig durch das Makro angelegt wird und nicht ich den Pfad bereits erstellt haben muss.
Anzeige
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:06:20
Rudi
Hallo,
für deinen Fall:
Retval = MakeSureDirectoryPathExists("C:\FirmaABC\Abteilung\Unterabteilung\Lagermonitoring\" &Year(date) &"\Version_extern\")
Gruß
Rudi
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:24:54
Harry
Hallo Rudi,
das hört sich schon sehr gut an, allerdings bin ich noch nicht ganz da wo ich hinmöchte.
Bei dem Reporting handelt es sich um eine Auswertung für die Vergangenheit. Das bedeutet, dass das Reporting für Dezember 2017 im Januar 2018 erstellt wird. Allerdings darf ich das Reporting ja nicht im Jahr 2018 abspeichern sondern im Jahr 2017.
Wie muss die Angabe bzw. der Code dafür lauten?
Vielen Dank bereits!
Anzeige
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:29:13
Harry
Edit:
Also besser ausgedrückt: wie muss der Code " &Year(date) &" geschrieben werden, damit ich statt dem aktuellen Jahr das Vorjahr erhalte?
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:31:42
Rudi
logischerweise &Year(date)-1.
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:31:43
Rudi
logischerweise &Year(date)-1.
AW: Ordner auf Exist prüfen, sonst anlegen
12.01.2018 13:34:35
Harry
Wahnsinn! Wie einfach aber genial die Lösung ist... :)
Dann bin ich jetzt rundum zufrieden.
Besten Dank für eure Hilfe!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige