Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Ordner erstellen falls nicht vorhanden und Datei speichern

VBA Ordner erstellen falls nicht vorhanden und Datei speichern
10.02.2020 11:09:42
Chris
Hallo Community,
Ich habe ein Problem mit einer Datei die ein Makro enthält das mein Vorgänger vor ein paar Jahren erstellt hat und hoffe das hier jemand ist der mir damit helfen kann!
Bei mir sind so gut wie keine Makro-Kenntnisse vorhanden! An dieser Stelle auch gleich die Frage: Wer kennt ein gutes Buch das mich in die VBA Welt einführt!!
Zu meinem Problem:
Ich möchte eine Datei in einem bestimmten Verzeichnis speichern. Das Stammverzeichnis ist dabei immer das gleiche.
Jährlich muss einmal ein Ordner für das laufende Jahr erstellt werden sobald die erste Datei erstellt wird.
Innerhalb diese Ordner müssen nun wiederum Unterordner erstellt werden welche die ersten 8 Zeichen des Dateinamens haben sollen.
In diesem Ordner wiederum soll dann die Datei abgelegt werden!
Die Werte werden alle aus Zellen in der Datei ausgelesen.
Beispiel:
Datei1 "X:\2020\RL200001\RL200001 - yy - xxxxxxx.xlsx"
Datei2 "X:\2020\RL200002\RL200002 - ab - wsadcx.xlsx"
Dat....
Stammverzeichnis: "X:\" ==> Zelle BQ55
Variabler Ordner: "2020" für das Jahr 2020 ==> Zelle BQ58
Unterordner: "RL200001" = die ersten 8 Zeichen des Dateinamens. Diese Nummer ist immer fortlaufend und setzt sich aus den letzten beiden Zeichen des aktuellen Jahres und einer fortlaufenden Nummer zusammen und wird aus einem Teil der Zelle BQ61 generiert
Dateiname: "RL200001 - yy - xxxxxxx" ==> Zelle BQ61
Wenn der variable Ordner schon vorhanden ist soll direkt ein Unterordner erstellt und die neue Datei darin abgelegt werden.
Bisher funktioniert das Makro so das der Name der Datei autom. erstellt und der User dann aufgefordert wird den Speicherpfad aussuchen.
In dem variablen Ordner muss er dann den betreffenden Unterordner erstellen und die Datei darin speichern.
In der Vergangenheit hatte ich dann öfters das Problem das die Dateiene in falschen Ordner waren oder die Ordner nicht den Namensvorgaben entsprachen und ich immer aller Ordner durchsuchen musste.
Das Makro das hier bisher verwendet wurde ist folgendes:
'Aufruf über Modul1

Public Sub CommandButton1_Click()
Dim Datei As String
Dim Verzeichnis As String
Dim SaveDummy As Variant
'blendet die Schaltfäche aus
Worksheets("dokname").Unprotect Password:="XXXX"
ActiveWorkbook.ActiveSheet.Shapes("CommandButton1").Visible = False
Worksheets("dokname").Protect Password:="XXXX"
Verzeichnis = "F:\RL\"                                         'Verzeichnis-Vorschlag
Datei = "RL" & Range("BQ61") & ".xlsx"           'Datei-Vorschlag
SaveDummy = SpeichernUnter(Verzeichnis & Ordner & Datei)
If SaveDummy  False Then ActiveWorkbook.SaveAs SaveDummy Else ActiveWorkbook.ActiveSheet. _
Shapes("CommandButton1").Visible = True    'Es wurde im Dialog auf Speichern gedrückt
End Sub

'Fragt den gewünschten Dateinamen ab und gibt ihn mit Pfad als String @Vorgabename zurück

Private Function SpeichernUnter(VorgabeName As String) As Variant
SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, Filefilter:="Excel  _
_
Dateien (*.xlsx),*.xlsx*", _
FilterIndex:=1, Title:="Speichern unter...", ButtonText:="speichern")
End Function

'Methode zum Testen des show/hide Befehls

Private Sub showHideButton()
ActiveWorkbook.ActiveSheet.Shapes("CommandButton1").Visible = True
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Ordner erstellen falls nicht vorhanden und Datei speichern
10.02.2020 12:26:00
Nepumuk
Hallo Chris,
teste mal:
Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Private Sub CommandButton1_Click()
    
    Dim Datei As String, Verzeichnis As String
    
    'Verzeichnis-Name
    Verzeichnis = Range("BQ55").Text & Range("BQ58").Text & _
        "\" & "RL" & Left$(Range("BQ61").Text, 6) & "\"
    
    'Datei-Name
    Datei = "RL" & Range("BQ61").Text & ".xlsx"
    
    'Ordner anlegen
    If MakeSureDirectoryPathExists(Verzeichnis) = 0 Then
        Call MsgBox("Fehler beim erstellen des Ordners.", vbCritical, "Fehler")
        Exit Sub
    End If
    
    'Datei speichern
    Application.DisplayAlerts = False
    Call ThisWorkbook.SaveAs(Filename:=Verzeichnis & Datei, _
        FileFormat:=xlOpenXMLWorkbook)
    Application.DisplayAlerts = True
    
    'Button ausblenden
    Call Unprotect(Password:="XXXX")
    CommandButton1.Visible = False
    Call Protect(Password:="XXXX")
    
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Ordner erstellen falls nicht vorhanden und Datei speichern
12.02.2020 12:53:43
Chris
Hi Nepumuk!
Super - vielen vielen lieben Dank.
Das Makro hat nach ein paar kleinen Anpassung bestens funktioniert.
Gruß Chris

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Ordner erstellen und Datei speichern


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt.
  2. Aktiviere die Entwicklertools: Gehe zu „Datei“ > „Optionen“ > „Menüband anpassen“ und aktiviere „Entwicklertools“.
  3. Füge einen Button hinzu: Gehe zu „Entwicklertools“ > „Einfügen“ > „Button (Formularsteuerelement)“. Zeichne den Button auf dein Arbeitsblatt.
  4. Erstelle das Makro: Klicke mit der rechten Maustaste auf den Button und wähle „Makro zuweisen“. Erstelle ein neues Makro mit folgendem Code:
Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Private Sub CommandButton1_Click()
    Dim Datei As String, Verzeichnis As String
    Verzeichnis = Range("BQ55").Text & Range("BQ58").Text & "\" & "RL" & Left$(Range("BQ61").Text, 6) & "\"
    Datei = "RL" & Range("BQ61").Text & ".xlsx"

    If MakeSureDirectoryPathExists(Verzeichnis) = 0 Then
        MsgBox "Fehler beim Erstellen des Ordners.", vbCritical, "Fehler"
        Exit Sub
    End If

    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=Verzeichnis & Datei, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
    CommandButton1.Visible = False
End Sub
  1. Teste das Makro: Klicke auf den Button, um zu prüfen, ob der Ordner erstellt wird und die Datei im richtigen Verzeichnis gespeichert wird.

Häufige Fehler und Lösungen

  • Fehler beim Erstellen des Ordners: Stelle sicher, dass der Pfad in den Zellen BQ55 und BQ58 korrekt ist. Überprüfe, ob die Berechtigungen zum Erstellen von Ordnern in diesem Verzeichnis vorhanden sind.
  • Datei wird nicht gespeichert: Prüfe, ob der Dateiname in Zelle BQ61 korrekt ist und keine ungültigen Zeichen enthält.
  • Button nicht sichtbar nach Speicherung: Stelle sicher, dass du den Button in deinem Code korrekt ausblendest.

Alternative Methoden

  • Du kannst Excel VBA auch verwenden, um eine Ordnerstruktur zu erstellen. Verwende dafür ein Makro, das mehrere Ordner und Unterordner gleichzeitig anlegt.
  • Eine andere Möglichkeit ist die Verwendung von Batch-Dateien oder PowerShell, um die Ordnerstruktur außerhalb von Excel zu verwalten.

Praktische Beispiele

  • Ordnerstruktur erstellen: Um eine gesamte Ordnerstruktur aus Excel zu erstellen, kannst du den folgenden Code verwenden:
Sub ErstelleOrdnerstruktur()
    Dim Hauptordner As String
    Hauptordner = "X:\2020\"

    Dim Unterordner As Variant
    Unterordner = Array("RL200001", "RL200002", "RL200003")

    Dim i As Integer
    For i = LBound(Unterordner) To UBound(Unterordner)
        If Dir(Hauptordner & Unterordner(i), vbDirectory) = "" Then
            MkDir Hauptordner & Unterordner(i)
        End If
    Next i
End Sub
  • Datei speichern: Um eine Datei in einem bestimmten Ordner zu speichern, kannst du die oben beschriebene Methode verwenden, um sicherzustellen, dass der Ordner existiert, bevor du die Datei speicherst.

Tipps für Profis

  • Verwende modulare Programmierung: Teile deinen Code in verschiedene Funktionen auf, um ihn übersichtlicher und leichter wartbar zu machen.
  • Fehlerbehandlung implementieren: Nutze On Error Resume Next und On Error GoTo für eine gezielte Fehlerbehandlung.
  • Datenvalidierung nutzen: Stelle sicher, dass die Eingabewerte in den Zellen korrekt sind, bevor du mit dem Speichern beginnst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ein Ordner nur einmal erstellt wird?
Verwende die Dir-Funktion, um zu überprüfen, ob der Ordner bereits existiert, bevor du ihn erstellst.

2. Welche Excel-Version benötige ich für die VBA-Programmierung?
Die beschriebenen Methoden sind in Excel 2010 und späteren Versionen verfügbar.

3. Wie kann ich ein Inhaltsverzeichnis für Ordner in Excel erstellen?
Du kannst die Dir-Funktion verwenden, um alle Dateien und Ordner in einem Verzeichnis aufzulisten und diese in einer Excel-Tabelle darzustellen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige