vanuit Access formulier directory-naam aanmaken

Status
Niet open voor verdere reacties.

Access2013

Gebruiker
Lid geworden
7 apr 2013
Berichten
33
Beste forumleden,

Ik heb een Access-bestand met Frm bijgesloten als voorbeeld. Op het Frm kunnen wat basisgegevens opgeroepen worden. Ook heb ik een opdrachtenknop toegevoegd. Deze maakt in verkenner op de C: schijf automatisch een directory aan. Nu met de naam “project”.
Ik zoek de volgende oplossingen.

Oplossing 1: Ik wil de nieuw aan te maken directory-naam vullen met gegevens die zijn opgeroepen op het Frm. Bijvoorbeeld: directory 1010 – Nijmegen - nwb woning

Aanvullende oplossing: Als het mogelijk is wil ik de net nieuw aangemaakte directory vullen met een paar lege sub-mappen die standaard een vaste naam krijgen. Bijvoorbeeld mappen met de naam offerte, opdracht, enz ….
Wie kan mij helpen?

Ik heb op internet wel wat codes kunnen vinden maar nog niet de code die ik voldoende snap om te verbouwen.
 

Bijlagen

  • test aanmaak directory.rar
    23,4 KB · Weergaven: 22
Je kunt op 2 manieren een map maken (wel meer vermoed ik, maar ik heb nu 2 voorbeeldjes ;) ). MkDir in een lus (jij gebruikt één commando) of met VBScript. De laatste is een stuk korter.

Code:
Public Function CreateFolder(destDir As String) As Boolean
Dim i As Long
Dim prevDir As String
   
   On Error Resume Next
   For i = Len(destDir) To 1 Step -1
       If Mid(destDir, i, 1) = "\" Then
           prevDir = Left(destDir, i - 1)
           Exit For
       End If
   Next i
   
   If prevDir = "" Then CreateFolder = False: Exit Function
   If Not Len(Dir(prevDir & "\", vbDirectory)) > 0 Then
       If Not CreateFolder(prevDir) Then CreateFolder = False: Exit Function
   End If
   
   On Error GoTo errDirMake
   MkDir destDir
   CreateFolder = True
   Exit Function
   
errDirMake:
   CreateFolder = False

End Function

Code:
Function CreateFolders(Path As String)
Dim fS As Object
Dim FolderArray As Variant
Dim Folder As String

    Set fS = CreateObject("Scripting.FileSystemObject")
    FolderArray = Split(Path, "\")
    For i = LBound(FolderArray) To UBound(FolderArray)
        If i <> 0 Then Folder = FolderArray(i - 1)
        Folder = Folder & FolderArray(i) & "\"
        If Not fS.FolderExists(Folder) Then fS.CreateFolder (Folder)
        FolderArray(i) = Folder
    Next
    MsgBox ("Folders created")

End Function
 
Ik heb uit jou twee opties de onderste code ingeplakt (de bovenste kreeg ik niet werkend). Ik heb de eerste coderegel buitenwerking gesteld dmv een apostrof, en afgesloten met End Sub ipv End Funtion (zie ook onderstaande code).

Wanneer ik de opdracht uitvoer krijg ik een MsgBox ("Folders created") te zien. Uit de ingeplakte code kan ik niet uitlezen hoe de folder heet of waar de folder is aangemaakt.

Kun je me verder helpen :confused:?


Private Sub Knop9_Click()

'Function CreateFolders(Path As String)
Dim fS As Object
Dim FolderArray As Variant
Dim Folder As String

Set fS = CreateObject("Scripting.FileSystemObject")
FolderArray = Split(Path, "\")
For i = LBound(FolderArray) To UBound(FolderArray)
If i <> 0 Then Folder = FolderArray(i - 1)
Folder = Folder & FolderArray(i) & "\"
If Not fS.FolderExists(Folder) Then fS.CreateFolder (Folder)
FolderArray(i) = Folder
Next
MsgBox ("Folders created")

End Sub
 
En waarom heb je de functie omgezet naar een Sub? Nu doet-ie het niet meer.... Je had beter kunnen vragen hoe je de functie gebruikt :).
Ik gebruik zelf overigens ook altijd de onderste variant; ik heb de eerste ergens gevonden en zo'n beetje letterlijk overgenomen, niet eens getest dus.
Met uw goedvinden maak ik er toch weer een functie van, want anders gaat-ie echt niet werken...
Code:
Function CreateFolders(Path As String)
Dim fS As Object
Dim FolderArray As Variant
Dim Folder As String

    Set fS = CreateObject("Scripting.FileSystemObject")
    FolderArray = Split(Path, "\")
    For i = LBound(FolderArray) To UBound(FolderArray)
        If i <> 0 Then Folder = FolderArray(i - 1)
        Folder = Folder & FolderArray(i) & "\"
        If Not fS.FolderExists(Folder) Then fS.CreateFolder (Folder)
        FolderArray(i) = Folder
    Next
    MsgBox ("Folders created")

End Function
Hoe gebruik je dan de knop? Nou zo dus:
Code:
Private Sub Knop9_Click()
Dim Pad As String
     Pad = "C:\" & Me.Project & "\" & Me.Plaats & "\" & Me.Sector
     CreateFolders Pad
End Sub
Het voorbeeldje heb ik uiteraard uit de lucht gezogen. In dat virtuele formulier staan 3 tekstvelden: Project, Plaats en Sector en die worden in één string gezet en de string wordt als parameter meegegeven aan de functie. Kan korter (string is niet nodig) maar dit is wat duidelijker hoop ik.
En graag de volgende keer je code opmaken met de CODE knop :)
 
We zijn er bijna.

Ik heb het bestand aangepast en als bijlage weer toegevoegd. Het geheel werkt nu, CODE knop ook:D. Nog één vraag.

Hoe krijg ik het voor elkaar om twee sub mappen in één map te plaatsen? Ik heb ook een 'aantekening in de code geplaatst.
 

Bijlagen

  • test 2 aanmaak directory.rar
    50,4 KB · Weergaven: 31
Het geheel werkt nu, CODE knop ook:D.
Nu de knop nog gebruiken ;)
Om 2 mappen aan te maken, moet je de functie 2 keer aanroepen, met de juiste mapnaam. Dus iets als:
Code:
Private Sub Knop9_Click()
Dim Pad As String
     Pad = "C:\" & Me.projectnummer & " " & Me.plaats & "-" & Me.titel & "\offerte"
     CreateFolders Pad
     Pad = "C:\" & Me.projectnummer & " " & Me.plaats & "-" & Me.titel & "\opdracht"
     CreateFolders Pad
End Sub
 
Laatst bewerkt:
Alles werkt,

Ik hoop dat je met de knop, het invullen van de juiste benaming in de 1e opdrachtregel bedoelt.

Ik heb het definitieve bestand toegevoegd.

Bedankt OctaFish
 

Bijlagen

  • def aanmaak directory.rar
    22,9 KB · Weergaven: 43
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan