re re re
Ik durf niet aan te dringen, maar het advies van Fgirard is om zowel voor het gebruik van [Scripting.FileSystemObject] als voor [SaveAs] te volgen.
Welnu, nu kunnen we volharden in het gebruik van Dir, maar we moeten het beest een goede puinhoop maken, het onderscheid maken tussen bestanden en mappen !
Uw codefragment:
'Test of de map met het jaartal bestaat, zo niet, maak deze aan
Als Dir(PathFileNamePDF) = "" dan
MkDir PathFileNamePDF
Einde als
Ik vertaal: Als er geen bestand is op het adres [PathFileNamePDF], roep dan MkDir aan om de laatste submap in het adres [PathFileNamePDF] te maken.
Uw test is niet de juiste, dus MkDir kan crashen als de laatste submap van het adres bestaat (runtime-fout 75).
MkDir crasht ook als de voorlaatste submap van het adres niet bestaat (runtime-fout 76).
MkDir crasht ook als de schijf, bijvoorbeeld [R:] niet beschikbaar is, als ...
Aan de andere kant is MkDir ongevoelig voor het al dan niet plaatsen van een [\] aan het einde van het adres.
een licht gewijzigd programma uit de VBA-help (selecteer Dir en druk op F1 om de hulp te krijgen):
' Toont in het uitvoeringsvenster (Ctrl+G) de namen van de mappen die aanwezig zijn op [C:\A\]
' en als een van deze mapnamen "2014" is, stopt het programma
Dim MyFile, MyPath, MyName
MyPath = "C:\A\" ' Definieert het pad.
MyName = Dir(MyPath, vbDirectory) ' Krijgt de eerste invoer.
Do While MyName <> "" ' Start de lus.
' Negeert de huidige map en de
' met de huidige map.
Als MijnNaam <>." en MijnNaam <> ".. " Dan
' Gebruikt een vergelijking op bitniveau om te verifiëren dat MyName een map is.
Als (GetAttr(MyPath & MyName) en vbDirectory) = vbDirectory Dan
Debug.Print MyName ' Geeft de vermelding alleen weer als deze een map vertegenwoordigt.
Als MyName = "2014" Stop dan met 'de map '2014' bestaat!!
Einde als
Einde als
MyName = Dir ' Krijgt de volgende invoer.
Strik
dit stukje code is voordelig te vervangen door (zie Fgirard Opmerkingen):
Dim oFSO als Scripting.FileSystemObject
Dim oFld als map
Set oFSO = Nieuwe Scripting.FileSystemObject
Als oFSO.FolderExists(" "c:\A\2014") = Waar Dan
Stoppen
Einde als
OF zelfs eenvoudiger en niet verwonderlijk
Zon fs
Set fs = CreateObject("Scripting.FileSystemObject")
Als fs. FolderExists("c:\A\2014") dan
Stoppen
Einde als
Valt nog te bezien voor uw [SaveAs]
Ik heb net dit geprobeerd:
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Zon Rep als Booleaanse
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Dir = swModel.SaveAs("C:\A\toto.pdf") ' " C:\A" zou moeten bestaan, als "toto.pdf" bestaat, wordt het automatisch overschreven
En het werkt heel goed. >> Begin bij het debuggen met tekst tussen haakjes (hier "C:\A\toto.pdf"). Als het werkt, retourneert Dir True. Vervolgens kunt u proberen uw tekst te vervangen door een variabele (hier een variabele die als een tekenreeks wordt gedeclareerd).
A+