Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ordner erstellen über Makro

Ordner erstellen über Makro
03.01.2018 14:22:34
Hans
Hallo Forum,
mein Makro speichert die Datei unter diesem Namen:
C:\Test\Hamburg 03.01.2017\Dateiname.xlsm
Das geht prima, nur einen anderen Ordner kann ich damit nicht erstellen....
Ich habe in Zelle C80 über VERKETTEN einen Ordnernamen angelegt, dieser setzt sich aus dem Ortsnamen und dem Datum zusammen. Nun bekomme diesen aber nicht in mein Makro eingebaut.
=WENN(AW4="";"";VERKETTEN(AW4;"-";TEXT($DU$4;"TT.MM.JJJJ")))
Ich hab es schon mit MkDir "C\Test\& Range("C80") versucht, bekomme aber dann immer einen Syntaxfehler...
Wie bekomme ich es hin, dass die Existenz des Ordners vorher geprüft wird ?
Was mache ich falsch ?
Hans
Hier mein Makro.......
(C:\Test\ ist vorgegeben... Sub speichern() ' speichern Makro ' Tastenkombination: Strg+p ' speichert die datei Dim strFilename As String ChDir "C:\Test\Hamburg_03.01.2018" ActiveWorkbook.SaveAs Filename:= _ "C:\Test\Hamburg_03.01.2018\" & Range("C77") & ".xlsm", FileFormat:= _ xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner erstellen über Makro
03.01.2018 14:34:18
ChrisL
Hi Hans
Ungetestet...
MkDir("C\Test\" & Range("C80") & "\")
cu
Chris
AW: Ordner erstellen über Makro
03.01.2018 14:44:45
Hans
Hallo Chris,
nun bekomme ich einen Fehler beim Kompilieren.
Muss ich nicht auch den hier fett Markierten Bereich irgendwie anpassen ?
Hans
Sub speichern()
' speichern Makro
' Tastenkombination: Strg+p
' speichert die datei
Dim strFilename As String
MkDir ("C:\Test\" & Range("C80") & "\")
ActiveWorkbook.SaveAs Filename:= _
"C:\Test\" & Range("C80") &\" & Range("C77") & ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Anzeige
AW: Ordner erstellen über Makro
03.01.2018 14:48:01
ChrisL
"C:\Test\" & Range("C80") & "\" & Range("C77") & ".xlsm
AW: Ordner erstellen über Makro
03.01.2018 14:59:06
Hans
Moin moin,
nun wird der Ordner C:\Test\München_03.01.2018 erstellt, die Datei jedoch nicht abgespeichert...
Laufzeitfehler '75'
Fehler beim Zugriff auf Pfad/Datei
Hier das Aktuelle Makro
Das fett Markierte ist gelb hinterlegt:
Sub speichern()
' speichern Makro
' Tastenkombination: Strg+p
' speichert die datei
Dim strFilename As String
MkDir ("C:\Test\" & Range("C80") & "\")
ActiveWorkbook.SaveAs Filename:= _
"C:\Test\" & Range("C80") & "\" & Range("C77") & ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Anzeige
Ordner schon vorhanden owT
03.01.2018 15:38:11
ChrisL
.
Ordner schon vorhanden
03.01.2018 15:46:22
Hans
Hallo,
JA, der Ordner C:\Test ist schon da.
Beim Klick auf Speichern, wird dann auch der Unterordner "München_03.01.2018" erstellt die Datei wird dann aber nicht abgespeichert.... Laufzeitfehler 75
Hans
Tschuldigung, war gerade Essen
Hauptordner-Unterordner-Dateiname
03.01.2018 15:53:11
Hans
Hallo noch mal,
der Hauptordner "Test" ist immer gleich... also
C:\Test
hier soll dann der Unterordner, erstellt aus der Verkettung in Zelle C80 erstellt werden....
zum Beispiel: Hamburg_18.12.2017
So dass der Pfad dann so aussieht: C:\Test\München_03.01.2018\Dateiname.xlsm
Ich hoffe man versteht mein Anliegen....
Hans
Anzeige
AW: Hauptordner-Unterordner-Dateiname
03.01.2018 16:06:20
ChrisL
Hi Hans
Dass der Hauptordner schon vorhanden ist, war mir klar. Ich hätte gedacht, dass du auch den Unterordner im Rahmen der Tests schon erstellt hast, dann kannst du den gleichen Ordner natürlich nicht noch einmal erstellen.
Der Debugger (gelbe Zeile) steht ja hier:
MkDir ("C:\Test\" & Range("C80") & "\")
Der Syntax ist grundsätzlich richtig. Ob ein korrekter Wert in C80 steht und ob du die benötigten Rechte für die Ordnererstellung hast, kann ich nicht überprüfen.
cu
Chris
Anzeige
AW: Hauptordner-Unterordner-Dateiname
03.01.2018 16:27:22
Hans
Hallo noch mal,
Das Verzeichnis (Ordner)
C:\Test\München_03.01.2018
wurde erstellt, nur die Datei wird nicht gespeichert...
Bin halt noch VBA Anfänger, daher schnalle ich das nicht so schnell....
Dim strFilename As String
MkDir ("C:\Test\" & Range("C80") & "\")
ActiveWorkbook.SaveAs Filename:= _
"C:\Test\" & Range("C80") & "\" & Range("C77") & ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Anzeige
AW: Hauptordner-Unterordner-Dateiname
03.01.2018 16:45:04
Hans
Moin,
hab ich das richtig verstanden?
MkDir ("C:\Test\" & Range("C80") & "\") erstellt immer wieder den Ordner neu? Das muss ja nicht sein, denn diesen Ordner brauche ich nur einen Tag. Am nächsten Tag heißt er dann z.B. "München_04.01.2018"
Ich hatte es eben mal versucht, nach dem ich die Daten neu vergeben habe.
Also C77 wir so erstellt:
Prüfername / Ort / Straße / Hausnummer / Datum / Uhrzeit (daraus wird der Dateiname erstellt)
Hansen/München/Marienstraße/15/03.01.2018/16:33
Der Ordnername wird in C80 erstellt über "Ort" und "Datum"
München/03.01.2018
Sollte dann so aussehen: (Verzeichnispfad)
C:\Test\München_03.01.2018\Hansen-München-Marienstraße-15-03.01.2018-16:33.xlsm
Komischerweise geht es manchmal, manchmal halt nicht....
Nur Hausnummer ändern bringt nichts. Erst das Schließen und erneute Aufrufen dann Hausnummer ändern und dann Speichern geht....
Warum ?
Hans
Anzeige
AW: Hauptordner-Unterordner-Dateiname
03.01.2018 17:19:15
ChrisL
Hi Hans
MkDir = Make Directory = Erstelle Verzeichnis
Jedes mal, wenn du den Code ausführst, wird ein Verzeichnis erstellt.
Konzentriere dich erstmal auf die Ursachensuche für die Fehlermeldung. Ist es richtig, das der Debugger (gelbe Zeile) auf MkDir steht?
Wenn ja, ist der Dateiname resp. Hausnummer vorerst irrelevant (du kannst den Codeteil "SaveAs" zum Test auch mal löschen).
Der Fehler bei der Ordnererstellung erscheint dann, wenn der Ordner schon vorhanden ist oder immer?
cu
Chris
Anzeige
AW: Hauptordner-Unterordner-Dateiname
03.01.2018 19:11:54
Hans
Hi Chris,
vielen Dank für deine Hilfe.
Offenbar scheint es am Datum zu liegen. Nun habe ich die Verkettung in Zelle C80 so abgeändert, dass auch der Straßenname und die Hausnummer mit einbezogen werden.
Ist zwar blöd, da nun für jede Straße und Hausnummer ein neuer Ordner angelegt werden, aber wenn es anders nicht geht....
Hans
Anzeige
AW: Hauptordner-Unterordner-Dateiname
04.01.2018 14:33:54
fcs
Hallo Hans,
es gibt Zeichen, die für Dateinamen und Ordner nicht zulässig sind: : / \ | * ? &lt &gt und "
Das muss man vor dem Speichern/anlegen eines Ordner prüfen,um den Fehler zu vermeiden.
Bevor du einen neuen Ordner anlegst, musst du prüfen,ob er schon vorhanden ist.
Falls mehrere Unterordner möglich sind muss die gesamte Struktur geprüft und angelegt werden.
Du musst für den Dateinamen also das Format für die Uhrzeit ohne Doppelpunkt einbauen bzw. ein anderes Zeichen verwenden. Etwa wie folgt:
Gruß
Franz
Tabelle1

 BC
66PrüfernameMeier
67StraßeMarienplatz
68Hausnummer22a
69  
70  
71  
72OrtKiel
73Datum04.01.2018
74Uhrzeit15:30
75  
76  
77DateinameMeier-Kiel-Marienplatz-22a-04.01.2018-15_30
78  
79  
80UnterordnerKiel_04.01.2018
81  

Formeln der Tabelle
ZelleFormel
C77=C66&"-"&C72&"-"&C67&"-"&C68&"-"&TEXT(C73;"TT.MM.JJJJ")&"-"&TEXT(C74;"hh""_""mm")
C80=C72&"_"&TEXT(C73;"TT.MM.JJJJ")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
angepasstes Makro zum Speichern:
Sub speichern()
' speichern Makro
' Tastenkombination: Strg+p
' speichert die datei
Dim strFilename As String
Dim strOrdner As String, varOrdner, i As Integer, strZeichen As String
strOrdner = "C:\Test\" & ActiveSheet.Range("C80").Text
varOrdner = Split(strOrdner, "\")
strOrdner = varOrdner(0)
For i = 1 To UBound(varOrdner)
If fncheckFoldername(varOrdner(i)) Then
strOrdner = strOrdner & Application.PathSeparator & varOrdner(i)
If Dir(strOrdner, vbDirectory) = "" Then
VBA.MkDir Path:=strOrdner
End If
Else
MsgBox "Der Unter-Ordner """ & varOrdner(i) _
& """ enthält unzulässige Zeichen ( :  /  \  |  *  ?   oder "" )", _
vbOKOnly, "Prüfung Ordnername"
Exit Sub
End If
Next i
strFilename = ActiveSheet.Range("C77").Text & ".xlsm"
If fncheckFilename(strFilename, strZeichen) Then
If Dir(strOrdner & "\" & strFilename)  "" Then
If MsgBox("vorhandene Datei: " & strFilename & vbLf & "im Ordner: " & strOrdner &  _
vbLf _
& "überschreiben?", vbQuestion + vbOKCancel, "Datei speichern") = vbOK Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strOrdner & "\" & strFilename, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.DisplayAlerts = True
End If
Else
ActiveWorkbook.SaveAs Filename:=strOrdner & "\" & strFilename, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End If
Else
MsgBox "Der Dateiname """ & strFilename _
& """ enthält unzulässige Zeichen  " & strZeichen, _
vbOKOnly, "Prüfung Dateiname"
End If
End Sub
Function fncheckFilename(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", "/", "\", "|", """", "?", "*", "")
fncheckFilename = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & "  " & arrZeichen(i)
End If
Next
If strZ  "" Then fncheckFilename = False
End Function
Function fncheckFoldername(ByVal strName, Optional strZ As String) As Boolean
Dim arrZeichen
Dim i As Integer
arrZeichen = Array(":", "/", "\", "|", """", "?", "*", "")
fncheckFoldername = True
For i = LBound(arrZeichen) To UBound(arrZeichen)
If InStr(1, strName, arrZeichen(i)) > 0 Then
strZ = strZ & "  " & arrZeichen(i)
End If
Next
If strZ  "" Then fncheckFoldername = False
End Function

Anzeige
AW: Hauptordner-Unterordner-Dateiname
04.01.2018 13:56:16
Rudi
Hallo,
Sollte dann so aussehen: (Verzeichnispfad)
C:\Test\München_03.01.2018\Hansen-München-Marienstraße-15-03.01.2018-16:33.xlsm

Du musst auch darauf achten, dass der Dateiname keine unzulässigen Zeichen enthält (16:33)
Gruß
Rudi
AW: Ordner erstellen über Makro
04.01.2018 14:17:18
Rudi
Hallo,
Declare

Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal Pfad As String) As Long

Sub Pfad_anlegen()
'Ist das Verzeichnis nicht wie angegeben vorhanden, wird es angelegt.
MakeSureDirectoryPathExists "C:\temp\test\test\test\"
End Sub
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Ordner über Excel VBA erstellen und verwalten


Schritt-für-Schritt-Anleitung

Um mit Excel VBA einen Ordner zu erstellen, kannst du das folgende Makro verwenden. Es prüft zuerst, ob der Ordner bereits existiert, bevor er ihn anlegt. Das Makro speichert anschließend die Datei im neu erstellten Ordner.

Sub speichern()
    ' speichern Makro
    Dim strFilename As String
    Dim strOrdner As String
    Dim varOrdner As Variant
    Dim i As Integer

    ' Ordnername aus Zelle C80
    strOrdner = "C:\Test\" & ActiveSheet.Range("C80").Text
    varOrdner = Split(strOrdner, "\")

    ' Überprüfen und Erstellen des Ordners
    For i = 1 To UBound(varOrdner)
        If Dir(varOrdner(i), vbDirectory) = "" Then
            MkDir strOrdner
        End If
        strOrdner = strOrdner & Application.PathSeparator & varOrdner(i)
    Next i

    ' Dateiname aus Zelle C77
    strFilename = ActiveSheet.Range("C77").Text & ".xlsm"

    ' Datei speichern
    ActiveWorkbook.SaveAs Filename:=strOrdner & "\" & strFilename, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub

Häufige Fehler und Lösungen

  1. Laufzeitfehler '75' - Fehler beim Zugriff auf Pfad/Datei

    • Dieser Fehler kann auftreten, wenn der Ordner, in dem du die Datei speichern möchtest, nicht existiert oder nicht erstellt werden konnte. Stelle sicher, dass der Pfad korrekt ist und der Ordner existiert.
  2. Syntaxfehler bei der Verwendung von MkDir

    • Überprüfe, ob der Pfad korrekt und vollständig angegeben ist. Der Befehl sollte in der Form MkDir("C:\Test\" & Range("C80") & "\") geschrieben sein, ohne zusätzliche Klammern.
  3. Ordner bereits vorhanden

    • Wenn du versuchst, einen Ordner zu erstellen, der bereits existiert, wird ein Fehler angezeigt. Verwende die Dir-Funktion, um zunächst zu prüfen, ob der Ordner vorhanden ist.

Alternative Methoden

Wenn du mehrere Ordner auf einmal erstellen möchtest, kannst du die Funktion mkdir mehrere ordner anlegen verwenden. Beispiel:

Sub mehrereOrdnerAnlegen()
    Dim ordner As Variant
    ordner = Array("Ordner1", "Ordner2", "Ordner3")

    For Each o In ordner
        On Error Resume Next ' Fehler ignorieren, wenn der Ordner bereits existiert
        MkDir "C:\Test\" & o
        On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
    Next o
End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie du eine Ordnerstruktur erstellen kannst:

Sub ordnerstrukturErstellen()
    Dim basisOrdner As String
    Dim unterOrdner As String

    basisOrdner = "C:\Test\"
    unterOrdner = "Unterordner1\Unterordner2"

    ' Erstelle den Hauptordner
    MkDir basisOrdner

    ' Erstelle Unterordner
    MkDir basisOrdner & unterOrdner
End Sub

Tipps für Profis

  • Verwende die Application.PathSeparator-Eigenschaft, um sicherzustellen, dass der Pfad korrekt ist, unabhängig von der Windows-Version.
  • Achte darauf, dass deine Dateinamen und Ordnernamen keine unzulässigen Zeichen enthalten. Eine Funktion zur Überprüfung kannst du wie folgt implementieren:
Function fncheckFoldername(ByVal strName As String) As Boolean
    Dim ungültigeZeichen As String
    ungültigeZeichen = ":\/|*?"""
    fncheckFoldername = Not (InStr(1, ungültigeZeichen, Mid(strName, 1, 1)) > 0)
End Function

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ein Ordner nur einmal erstellt wird? Um zu verhindern, dass ein Ordner mehrfach erstellt wird, kannst du die Dir-Funktion verwenden, um die Existenz des Ordners zu überprüfen, bevor du ihn erstellst.

2. Welche Zeichen sind in Dateinamen und Ordnernamen nicht erlaubt? In Dateinamen und Ordnernamen sind die Zeichen : / \ | * ? " < > nicht zulässig. Stelle sicher, dass du diese Zeichen vor dem Erstellen eines Ordners prüfst.

3. Gibt es eine Tastenkombination, um einen neuen Ordner in Windows zu erstellen? Ja, die Tastenkombination Strg + Shift + N ermöglicht es dir, schnell einen neuen Ordner im Windows Explorer zu erstellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige