Automatisch een map aan laten maken bij nieuwe entry

Status
Niet open voor verdere reacties.

HandyMan

Gebruiker
Lid geworden
12 mei 2008
Berichten
170
Goedenavond,

Ik zou graag willen dat mijn database automatisch een mapje aanmaakt van een nieuwe entry, en deze dan de naam mee geeft van een bepaalde cel.
Dus als ik bijvoorbeeld een nieuwe rij toevoeg, en onder het kopje "sofinummer": "123456789" in voer, dan wil ik graag dat er een mapje ontstaat met de naam "123456789"

Dit omdat ik graag bij elke, in dit geval, persoon een persoonlijke map wil, zodat ik daar ingescande documenten in kan plaatsen. (Dit wil ik graag op deze manier om de grootte van de database binnen de perken te houden.)

Ik heb al veel op internet gezocht, en daaruit blijkt dat het met een VBA script moet, maar ik heb geen idee hoe ik deze zelf kan schrijven.

Kan iemand mij hierbij helpen?
 
Je praat in Excel termen; zit je wel in het goede forum?
 
Hier een functie waarmee je een map kan aanmaken.

Code:
Public Function MaakMap(SMap As String) As Boolean
'Maak een willekeurige map door eerst de voorafgaande submappen aan te maken
    On Error GoTo Fout
    Dim Smaph1, Smaph2, s1
    If Len(SMap) <= 1 Then
        MaakMap = False
        Exit Function
    End If
    Smaph1 = SMap
    If Right(Smaph1, 1) = "\" Then Smaph1 = Left(Smaph1, Len(Smaph1) - 1)
    If Left(Smaph1, 2) = "\\" Then
        s1 = InStr(3, Smaph1, "\")
    Else
        s1 = InStr(Smaph1, "\")
    End If
    Do While s1 > 0
        If s1 + 1 >= Len(Smaph1) Then Exit Do
        s1 = Nz(InStr(s1 + 1, Smaph1, "\"), 0)
        If s1 = 0 Then
            Smaph2 = Smaph1
        Else
            Smaph2 = Left(Smaph1, s1 - 1)
        End If
        On Error Resume Next
        MkDir Smaph2
        On Error GoTo Fout
    Loop
    If Dir(SMap, vbDirectory) <> vbNullString Then
        MaakMap = True
    Else
        MaakMap = False
    End If

Exit_fout:
    Exit Function
Fout:
    MaakMap = False
    MsgBox Err.Description
    Resume Exit_fout
End Function
Wellicht heb je er iets aan.

Jan
 
Ja, ik heb het wel over Access, alleen ben er nog maar net mee begonnen, dus vandaar dat ik misschien de verkeerde termen gebruik.

Misschien kan ik mijn vraag iets duidelijker formuleren:

Ik wil dus dat er een mapje wordt aangemaakt van elke nieuwe record die wordt ingevoerd, en de naam van het bijbehorende mapje moet de waarde van een cel zijn.

Voor de duidelijkheid voeg ik een afbeelding bij.
access.png
De naam van het mapje moet in dit geval dus "123456789" worden.
 
En heb je de functie van perpon al ingebouwd?
 
Ja, maar ik zie nergens een map ontstaan wanneer er een nieuwe record wordt toegevoegd. Waarschijnlijk ligt het aan mij, aangezien ik nog maar net begonnen ben met Access en vba.
 
Wat heb je precies gedaan? Doe jezelf overigens een lol, en doe er een voorbeeldje bij, want anders gaat dit draadje vermoedelijk èrg lang lopen...
 
Ik heb de code van perpon geplakt in een module, en toen opgeslagen op deze manier:

Knipsel1.PNG
 
Da's niet voeldoende, want de functie moet nog wel worden aangeroepen. Hier een voorbeeldje dat ik gebruik (is overigens een andere (simpelere) functie dan die van Perpon.

Code:
Private Sub CategoryName_AfterUpdate()
    If Me.NewRecord = vbTrue And Me.CategoryName & "" <> "" Then
        MapCheck (Application.CurrentProject.Path & "\" & Me.CategoryName)
    End If
End Sub
Deze code staat dus op een tekstvak bij de gebeurtenis <Na bijwerken> van dat tekstvak. Hij controleert eerst of het tekstvak niet leeg is, en of je wel in een nieuw record staat. Je wilt immers niet dat de code bij andere gebeurtenissen wordt uitgevoerd.
Als aan de voorwaarde is voldaan, wordt de functie MapCheck uitgevoerd. Die staat op een aparte module.
Code:
Function MapCheck(fldr)
Dim fs As Object
Dim Mappen As Variant
Dim Map As String
   Set fs = CreateObject("Scripting.FileSystemObject")
    If Not fs.FolderExists(fldr) Then
        Mappen = Split(fldr, "\")
        Map = ""
        For i = LBound(Mappen) To UBound(Mappen)
            Map = Map & Mappen(i) & "\"
            If Not fs.FolderExists(Map) Then
                fs.CreateFolder Map
            End If
        Next
    End If
End Function
 
@Handyman

Zo zie je maar weer dat er meerdere wegen naar Rome leiden. Succes verder.

Jan
 
@perpon: Jij hebt nog een check op een UNC pad; doet die van mij weer niet :)
 
Ik kan er nog steeds niet uit komen. Ik heb deze vraag ook op een Engels talig forum gesteld, en daar zeggen ze dat ik mijn probleem verkeerd heb geformuleerd.

De database wordt dus aangevuld vanuit een losstaand formulier die ik gemaakt heb in Visual Basic Express, niet vanuit een formulier in Access zelf. Heeft de informatie die hierboven is gegeven door jullie dan ook nog effect, of moet ik het ergens anders zoeken (in het formulier zelf bijvoorbeeld)?
 
Als je Access alleen gebruikt voor de data, dan pak je het hiermee verkeerd aan. A is de functie denk ik wel om te zetten naar VB, want mijn functie gebruikt standaard scripting. Maar waarom niet alles in Access gebouwd? Wat is het voordeel van een extern formulier?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan