MkDir error 75

Status
Niet open voor verdere reacties.

the10us

Gebruiker
Lid geworden
2 jul 2009
Berichten
32
Beste mensen,

Ik probeer door een VBA code automatisch een directory te laten maken op basis van projectnummer. Dat lukt. Vervolgens probeer ik een bepaald rapport als PDF in die zojuist gemaakte map op te laten slaan. Ook dat lukt. Maar slechts éénmalig....
Als ik opnieuw de code uitvoer (na bijvoorbeeld iets in het record veranderd te hebben) waarbij ik het rapport opnieuw wil laten opslaan, gebeurt er niks meer.
Ik heb gegoogled en gezocht, en het blijkt aan 'error 75' te liggen, de map bestaat namelijk al, dus stopt mijn VBA code omdat mijn map waar ik naar verwijs al bestaat.

Misschien staat er iets niet goed in mijn code? Ik ben nog niet heel ervaren op VBA gebied.
Kunnen jullie er eens naar kijken?

Code:
Private Sub Knop1049_Click()
Dim sMap As String

sPad = "D:\Temp\"
sMap = sPad & "Nummer " & [Projectnummer] & " " & [Klantnaam]

On Error GoTo DirMaken
ChangeFolder:
    ChDir (sMap)
    Exit Sub

DirMaken:
    MkDir (sMap)
    
    Resume Opslaan_cmdReportOpslaan

Opslaan_cmdReportOpslaan:
    strDocName = "Prijsoverzicht"
DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap & "\" & Projectnummer & ".pdf", , , , , acExportQualityPrint
End Sub
 
Als de ChDir niet fout gaat stopt het programma vanwege de Exit Sub.
Hij komt dan dus niet bij het gedeelte waar je het document opslaat.
 
Dank voor je reactie.

Als ik Exit Sub weghaal, werkt het nog steeds niet. Dan loopt hij weer vast op error 75, bij mkDir.
Als ik dat ook weghaal, dan werkt het perfect en overschrijft hij wel steeds de bestaande PDF.

Maar... als ik de directory weghaal die ik in sMap gedefinieerd heb dan loopt hij weer met error75 vast op ChDir (sMap), dit is ook logisch want de map bestaat niet en er is geen mkDir commando. Hetzelfde geldt als ik een nieuw projectnummer probeer weg te schrijven (er is dan geen map voor).
Tot zover begrijp ik het.

Volgens mij moet er een soort Loop in; als de map bestaat dan moet ie gewoon schrijven, bestaat de map niet dan moet hij gemaakt worden.
Is dit mogelijk?
 
Je volgorde klopt niet. Probeer te werken zonder labels.
In plaats van het fout te laten gaan en met on error te werken, kun je beter controleren of de map al bestaat en hem aanmaken als dat niet zo is.
 
Edmoor, dank wederom.
Ik ben nog behoorlijk onervaren met VBA en heb deze codes op internet gevonden en na veel fouten aangepast.

Mag ik je vragen of je je oplossing in een code kunt zetten? Dat zou mij enorm helpen!
 
Om te voorkomen dat je maar één map en verder geen subfolders kunt maken, gebruik ik een losse functie. In jouw voorbeeld ziet dat er dan zo uit:

Code:
Private Sub Knop1049_Click()
Dim sMap As String

ChangeFolder:
    sPad = "D:\Temp\" & Year(Date)
    On Error GoTo DirMaken
    ChDir (sPad)
    On Error GoTo 0

    sMap = sPad & "Nummer " & [Projectnummer] & " " & [Klantnaam]
    strDocName = "Prijsoverzicht"
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap & "\" & Projectnummer _
		& ".pdf", , , , , acExportQualityPrint
    Exit Sub

DirMaken:
'----------------------------------------------------------
'Nieuwe map maken als hij nog niet bestaat
'----------------------------------------------------------
    Call CreateDir(sPad)
    GoTo ChangeFolder

End Sub

En de functie:
Code:
Function CreateDir(ByVal Path As String)
Dim mpDirs As Variant
Dim mpPart As String
Dim i As Long

    mpDirs = Split(Path, "\")
    
    mpPart = mpDirs(LBound(mpDirs))
    For i = LBound(mpDirs) + 1 To UBound(mpDirs)
        mpPart = mpPart & "\" & mpDirs(i)
        On Error Resume Next
        MkDir mpPart
        On Error GoTo 0
    Next i

End Function
 
Laatst bewerkt:
[shame-mod]
Ik heb nog nooit gewerkt met functies. Het lukt me dan ook nog niet. Ik heb alles achter de knop geplakt, maar hij geeft nog steeds foutmelding.
[/shame-mod]

Nu hoef ik nooit met submappen te werken. Is er dan geen eenvoudigere oplossing mogelijk?
Bij mijn eerst geplaatste code heb ik echt het gevoel dat ik er bijna ben. Nog ff voorkomen dat ie stopt als de map al bestaat....
 
Om te beginnen: die functie zet je ergens onderaan de andere codes, for all I care; al heb ik 'm zelf in een aparte module staan. Maar hij kan ook op de module werken waar je de knop hebt staan. Uiteraard werkt de functie ook als je maar één map maakt. Maar als je in de Sub procedure de regel Call CreateDir(Pad) vervangt door: MkDir (sMap) dan ben je er al; het proces moet een (of meer) map maken als hij de map niet kan vinden; daarna moet hij terug naar de oorspronkelijke positie om de map te activeren. Maakt dus verder weinig uit wat je doet.
 
Edmoor, dank wederom.
Ik ben nog behoorlijk onervaren met VBA en heb deze codes op internet gevonden en na veel fouten aangepast.

Mag ik je vragen of je je oplossing in een code kunt zetten? Dat zou mij enorm helpen!


Ik zou het zo doen:
Code:
Private Sub Knop1049_Click()
    Dim sMap As String
    Dim sPad As String

    sPad = "D:\Temp\" & Year(Date)
    
    If Dir(sPad, vbDirectory) = "" then MkDir sPad
	
    ChDir (sPad)

    sMap = sPad & "Nummer " & [Projectnummer] & " " & [Klantnaam]
    strDocName = "Prijsoverzicht"
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap & "\" & Projectnummer _
		& ".pdf", , , , , acExportQualityPrint

End Sub

De opdracht ChDir (sPad) is hier nu eigenlijk overbodig en mag weg.
sPad en sMap kun je nu ook combineren waardoor de code weer eenvoudiger wordt.
Dit zou dus voldoende moeten zijn:

Code:
Private Sub Knop1049_Click()
    Dim sMap As String

    sMap = "D:\Temp\" & Year(Date)
    If Dir(sMap, vbDirectory) = "" then MkDir sMap

    sMap = sMap & "\" & "Nummer " & [Projectnummer] & " " & [Klantnaam] & "\" & Projectnummer & ".pdf"
    strDocName = "Prijsoverzicht"
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap,,,,, acExportQualityPrint

End Sub

Maar in ken Access niet en weet dus niet of het helemaal klopt voor Access.
Het controleren en evt. aanmaken van de map zou zo wel in orde moeten zijn.
 
Laatst bewerkt:
Nu blijkt het werken met submappen toch het handigste...
Dus de oplossing van OctaFish is de juiste.

Ik heb de code overgenomen en nu geeft ie toch nog een (voor mij onverklaarbare) fout bij uitvoering:
Ik krijg een compileerfout: Onjuist aantal argumenten of ongeldige eigenschappentoewijzing.
Vervolgens wijst hij in de code hiernaar:

Code:
DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap & "\" & Projectnummer _
        & ".pdf", , , , , acExportQualityPrint
en dan specifiek naar:
Code:
.OutputTo

Het lijkt wel alsof hij die "\" niet accepteert..?
Zoals gezegd begrijp ik helaas nog niet zoveel van VBA. Ik begin er wel steeds handiger in te worden met dit project :)

Maar OctaFish, heb jij enig idee waarom dit nu fout gaat?
 
Het zou kunnen dat je de slashes niet goed toevoegt; dat kan zijn dat er geen slash is waar er één moet, of dat je er twee hebt waar er uiteraard één volstaat. Ik zou daar dus op checken:
Code:
sPad = "D:\Temp\" & Year(Date)
On Error GoTo DirMaken
ChDir (sPad)
On Error GoTo 0
If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
sMap = sPad & "Nummer " & [Projectnummer] & " " & [Klantnaam] & "\"
DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, sMap & Projectnummer & ".pdf", , , , , , acExportQualityPrint
 
Hij blijft protesteren....

Ik heb al van alles geprobeerd, op allerlei plaatsen "\" toegevoegd maar allemaal zonder resultaat.

Ik heb even een database-je gemaakt en bijgevoegd. Zou je er eens naar willen kijken??
 

Bijlagen

Een s-je te weinig :)

Call CreateDir(sPad)
 
Ook met de extra "s" blijft het probleem.....

Misschien moet ik maar gewoon accepteren dat het niet kan.. :confused:
 
Heb je mijn bericht van 20:39 wel gelezen?
 
@Edmoor
Jazeker, en ook geprobeerd. Maar hij loopt op hetzelfde punt (.OutputTo) vast.
Dat doet hij ook bij de oplossing van OctaFish.

En ik weet het niet meer.... :shocked:
 
Het probleem dat je nu hebt heeft denk ik helemaal niks te maken met het aanmaken van de mappen, maar alles met de Output die je probeert te maken. Maak die eens wat simpeler, en haal de laatste parameter bijvoorbeeld eens weg. Vraagje tussendoor: worden de mappen wel of niet aangemaakt?
 
@Edmoor
Jazeker, en ook geprobeerd. Maar hij loopt op hetzelfde punt (.OutputTo) vast.
Dat doet hij ook bij de oplossing van OctaFish.

En ik weet het niet meer.... :shocked:

Het ging bij mij even om de wijze van controle of een map bestaat en deze dan evt. aanmaken.
Dat was in 1e instantie je probleem.

Krijg je een foutmelding bij die OutputTo?
 
Ik heb het laatste deel van Output weggehaald.
Dan loopt het wel door, en maakt hij netjes de map D:\Temp\2012

Maar nu wil ik b.v. dit:
D:\Temp\2012\Projectnummer\outputfile.pdf

Waar ik ook de "\" neerzet, hij geeft dan weer dezefde error....

Waar moet volgens jou die slash staan? In de sMap regel, of in de output regel?
 
Je vertelt nog steeds niet welke error hij dan geeft.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan