MkDir error 75

Status
Niet open voor verdere reacties.
Ik heb nog moeite met deze regel:
sMap = sPad & "Nummer " & [Projectnummer] & " " & [Klantnaam] & "\"

Ik heb daar nog niks van gezegd omdat je in je eerste post aangaf dat alles werkte, maar ik vraag mij af waar die gegevens vandaan komen... Op basis van de functie die ik hierboven heb neergezet, is dit in ieder geval een werkend voorbeeld:

Code:
Dim stDocName As String, stOutputName As String
Dim sMap As String, sPad As String

    sPad = "E:\Arjan\" & Year(Date) & "\"
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
    sMap = sPad & "Nummer " & Format(Date, "yymmdd") & "_" & Me.KlantID & "\"
    On Error GoTo DirMaken

ChangeFolder:
    ChDir (sMap)
    On Error GoTo 0

    stDocName = "rptBaklijst"
    stOutputName = "Test.pdf"
    DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, sMap _
        & stOutputName, OutputQuality:=acExportQualityPrint

Exit Sub

DirMaken:
'------------------------------------------------------------------------------------
'Nieuwe map maken als hij nog niet bestaat
'------------------------------------------------------------------------------------
    Call CreateDir(sMap)
    GoTo ChangeFolder
    
Exit Sub
 
Ik geloof dat ik een beginnersfout heb gemaakt (is niet erg, ik ben ook een VBA beginner)

Ik probeerde in de sMap regel de subdirectories te definieren, maar dit moet natuurlijk in de sPad.

Dus:

Code:
Private Sub Knop2_Click()
Dim sMap As String

ChangeFolder:
    sPad = "D:\Temp\" & Year(Date) & "\" & [Projectnummer]
    On Error GoTo DirMaken
    ChDir (sPad)
    On Error GoTo 0
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"

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

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


Nu maakt hij netjes de map Temp/2012/10/janssen.pdf

Octafish en Edmoor, hartelijk dank voor het meedenken!
Ik hoop dat dit topic voor anderen ook een oplossing kan geven die tegen hetzelfde probleem lopen.
 
Daarom zei ik dus dat je dat wel kon combineren en de ChDir weg kunt laten.
 
@Edmoor: Je hebt die ChDir juist nodig om te checken of de map bestaat of niet :) Op basis van die check (Error als map niet bestaat) wordt de routine niet omgeleid naar de DirMaken subroutine. Bestaat de map wel, dan kan het bestand worden opgeslagen. Dus lekker laten staan dat stuk!
 
Of een map bestaat kun je controleren met If Dir("Padnaam", vbDirectory) = ""
Zoals in mijn voorbeeld staat.
Je hebt dan geen on error, geen goto en geen labels of subroutine calls nodig.
 
Laatst bewerkt:
dat kan ook, maar een check moet er zowiezo zijn. En deze manier werkt prima, dus er is weinig reden om het anders te doen...
 
Ik ben altijd van de korte code :-)
 
Mag weer worden bijgeschreven onder het kopje <Mosterd na de Maaltijd>. Draadje is al afgesloten door TS, dus waarom nog zinloze opmerken erbij zetten?
 
Draadje is al afgesloten door TS, dus waarom nog zinloze opmerken erbij zetten?
Ter lering en vermaak kan dat geen kwaad omdat anderen ook op dit draadje terecht kunnen komen na een zoek opdracht.

De truuk met ChDir is sowieso niet af want als de map wel bestaat en de ChDir opdracht fout gaat omdat de gebruiker geen machtigen heeft om die map te benaderen wordt alsnog de MkDir opdracht uitgevoerd die dan fout gaat omdat de map al bestaat.
Er zal dus ook moeten worden gecontroleerd op de foutcode die door de ChDir opdracht wordt gegenereerd.
 
@Edmoor: Ter lering ende vermaeck? Een overbodige opmerking blijft een overbodige opmerking... Bovendien had je wat mij betreft je standpunt meer dan helder uitgelegd. Daar heb je T. echt niet voor nodig...
Je kunt een functie zo uitgebreid maken als je wilt, en als je wilt controleren of een gebruiker een map wel of niet mag zien, dan staat dat je uiteraard vrij. Ik geef een methode die in een standaardsituatie prima werkt. Voldoet die niet, vanwege rechten, dan pas je 'm aan. Overigens vind ik dat je qua kortheid van code niet helemaal gelijk hebt, omdat je appels met peren aan het vergelijken bent. Mijn functie maakt in één keer een compleet pad aan, en jouw oplossing doet dat niet. En TS is prima tevreden met die oplossing. Waarom dan proberen je gelijk te halen? En dat onnozele quooten van berichtjes waarop je reageert hoeft wat mij betreft ook niet. Je ziet echt wel dat een berichtje er pal boven staat...
 
Het gaat me niet om gelijk ofzo hoor maar in de code die ik als voorbeeld gaf wordt in 1 regel gecontroleerd of een map bestaat en zoniet dan wordt deze aangemaakt in diezelfde regel.
Maar er leiden meer wegen naar Rome. Die van jou werkt en die van mij ook.
 
Waarom dan proberen je gelijk te halen?

Blijft toch vreemd dat je iedere keer weer op een redelijk arrogante en met de botte bijl methode meent te moeten reageren als iemand anders met een goede suggestie komt.
Lijkt me een vrij zinloze wijze van communiceren, wat levert je dat nou op?
Zoals edmoor ook aangeeft, het gaat niet om goed of fout, het gaat erom dat er meer wegen naar Rome leiden.

Tardis
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan