Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Ordner per VBA erstellen

Begonnen von Cyberhunter, November 01, 2016, 14:53:10

⏪ vorheriges - nächstes ⏩

Cyberhunter

Hallo zusammen,

ich kann mal ein wenig Hilfe gebrauchen, da meine VBA Kenntnisse gen Null gehen.
Ich möchte aus Access (Formular) heraus im Filesystem Ordner erstellen. Dazu habe ich auch schon VBA Code gefunden:

Private Sub Jahr_anlegen_Click()
'prüfen ob ein Ordner vorhanden ist und falls nicht
'fragen ob Ordner erstellt werden soll
Dim Ord As String
Dim Antwort As Integer

Ord = "\\network\Folder\SubFolder\etc\" & [Folder]

  If Dir(Ord, vbDirectory) <> "" Then
      MsgBox "Ordner ist schon vorhanden"
  Else
  Antwort = MsgBox("Der Ordner " & Ord & " ist nicht vorhanden." _
          & vbNewLine _
          & "soll der Ordner angelegt werden?!", vbYesNo)
      If Antwort = vbYes Then
'Falls kein LW angegeben ist, erstellt die MkDir-Anweisung
'den neuen Ordner auf dem aktuellen LW.
'LW wurde aber durch "C:\xyz\" festgelegt
      MkDir Ord
      MsgBox "Ordner " & Ord & " angelegt"
      Else
      MsgBox "Es wurden keine Änderungen vorgenommen"
      Exit Sub
      End If
  End If
End Sub


Der funktioniert für den Hauptordner auch super. Nun möchte ich aber in einem Abwasch (mit diesem Klick) nicht nur den Ordner anlegen, sondern gleich dazu noch weitere fünf Unterordner.
z.B:
\Ordner\
und darunter
\01_Unterordner
\02_Unterordner
etc.

Wie muss ich den Code erweitern? Einfach nur noch entsprechend weitere Male mit angepassten Pfad hat nicht funktioniert.

Gruß
Olaf
Ich arbeite aktuell mit MS Access 2013

MzKlMu

Hallo,
Du musst den zuvor erstellen Ordner in der MkDir Anweisung für die Unterordner mit übergeben.
Gruß Klaus

Icemann1970

Hallo zusammen.
Ich bin auf der Suche nach dieser Anwendung, habe aber leider einige Probleme  damit.
Kann mir evtl. einer dabei helfen? Wenn ich den Code 1:1 kopiere und in meinem Form im btn "Bilder" funktioniert das nicht.
P.s.: ich habe keine Ahnung was ich da mache :-)
Mfg. Udo

DF6GL

#3
Hallo,

der Pfad sollte keinen Doppelslash vor dem LW-Buchstaben haben.

Checke mal im VBA-Editor unter Extras/Verweise, ob es evtl. einen gebrochenen, bzw. fehlerhaften Verweis gibt.
Korrigiere dies, falls das zutrifft.

Ansonsten kann man mit MkDir nur jeweils einen Ordner anlegen.



Mit folgendem Code (in einem Standardmodul) kann gleichzeitig eine ganze Ordner/Unterordnerstruktur angelegt werden:

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



Public Function fktCreateMultiPfad() as Long

    Dim strPfad As String
     strPfad = "c:\Verzeichnis1\Verzeichnis11\Verzeichnis111\Verzeichnis1111\"
     fktCreateMultiPfad = apiCreateFullPath(strPath)
End Function

Icemann1970

Guten Morgen Franz.
Ich habe die Doppelslash entfernt und in den Verweise nachgesehen.... kann damit aber nichts anfangen. Siehe Bild
Mfg. Udo

DF6GL

Hallo,

habe zwischenzeitlich meinen vorherigen Post erweitert...

Die Verweise scheinen ok zu sein...

Ist in JEDEM(!) Modul im Kopfbereich

Option Explicit

angegeben?

Wenn nicht, dies nachholen und im VBA-Editor Debuggen/Kompilieren anstoßen.

Icemann1970

Habe nachträglich die "Option Explicit" eingefügt und Debuggen/Kompilieren durchgeführt. Kein Erfolg.
Schade, ich wollte da noch zusätzlich das ein vorhandener Ordner geöffnet bzw ein neuer Ordner erstellt wird in Abhängigkeit des im Aktuellen Form ID Feld.
Hättest du da evtl. noch einen anderen Code auf lager ?
Mfg. Udo

ebs17

Der Code steht doch sinngemäß da.

Du brauchst für jeden Ordner ein eigenes MakeDir, und MakeDir kann nur einen Ordner eine Ebene tiefer erstellen.

Über die Win-API MakeSureDirectoryPathExists ist man da etwas schlagkräftiger.

Zitatin Abhängigkeit des im Aktuellen Form ID Feld
Einen gültigen Verzeichnispfad wirst Du wohl selber erstellen können ...
Mit freundlichem Glück Auf!

Eberhard

Icemann1970

Hmmmm, verstehe ich nicht. Ich gehe richtig davon aus, dass im Code der "Ord" das Feld ist auf welches er sich bezieht ( aus meinem Textfeld/Form/db)?

Sorry im Vorfeld für die "blöden" fragen :-), habe auch schon sehr viel versucht das zu lösen, hier und bei Google aber für mich ist das Zuviel was ich nicht begreife. Wenn ich eine Funktionierende Funktion habe macht es spaß diese zu verändern und dann geht es auch leichter das zu verstehen. Dank Euch habe ich schon mit den Makro`s die Freundschaft gekündigt :-)
Mfg. Udo


DF6GL

Hallo,


wo genau liegt denn das Problem?

ZitatNun möchte ich aber in einem Abwasch (mit diesem Klick) nicht nur den Ordner anlegen, sondern gleich dazu noch weitere fünf Unterordner.


Woher bekommst Du die Namen dieser Unterordner?


Icemann1970

Ich bekomme den Code nicht auf mein Formular umgesetzt.
In meinem Formular "Objekte" habe ich das Feld "GeräteNummer", das als Primärschlüssel arbeitet. Wenn ich in dem geöffnetem Formular bin möchte ich durch Klick auf Schaltfläche "Bilder" das sich ein Ordner, den ich in C:\Users\Pictures\ öffnet und einen neuen Ordner mit der Bezeichnung der aus dem geöffnetem Formular resultierender "GeräteNummer" erstellt bzw. wenn vorhanden ist öffnet.
Habe aber Probleme mit der Umsetzung, siehe Bild. Das mit dem Zitat mit 5 Unterordnern ist nicht von mir. Könnt Ihr mir helfen ?
Mfg. Udo

Beaker s.a.

Hallo Olaf,
ich wiederhole Franz' Frage
Zitatwo genau liegt denn das Problem?
Private Declare Function apiCreateFullPath Lib "imagehlp.dll"  Alias MakeSureDirectoryPathExists" _
(ByVal lpPath As String)  As Long

Public Function fktCreateMultiPfad() as Long

    Dim Ord As String
     Ord = "c:\xyz\network\Folder\SubFolder\etc\" & [Folder]
     fktCreateMultiPfad = apiCreateFullPath(Ord)
End Function

Wenn du es unbedingt mit MkDir machen willst, setze den kompletten Pfad in einem
String zusammen, und befülle mit Split(Ord, "\") ein Array, aus dem du anschliessend
in einer Schleife die Ordner erstellst.

Dim z As Integer
Dim Ord As String
Dim DeinArray As String
Ord = "c:\xyz\network\Folder\SubFolder\etc\" & [Folder]
DeinArray = Split(Ord, "\")
For z = 0 To UBound(DeinArray)
    Ord = Ord & DeinArray(z)
    MkDir Ord
Next z


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)