Vraag over mijn macro

Ik heb de wijzigingen aangebracht, maar het doet nog steeds hetzelfde, en als ik het hier opnieuw opstart of het bugs!

 

 


sans_titre.png

Ah, ik denk dat het komt omdat je niet de backslash aan het einde van je pad hebt!!

 

Voeg dit toe om dit te verifiëren:

 

Als right(FileNamePathPDF,1) = "\" dan

FileNamePathPDF = FileNamePathPDF & "\"

Einde als

 

Je moet het voor je regel zetten:

Als Dir$(FileNamePathPDF) = "" dan

1 like

Nee Lucas, het is hetzelfde dat ik het niet deed zoals je zei, ik deed het zo.

 

FileNamePathPDF = "C:\ANGER\pdf\" & FileNamePDF & "\"

 

Maar dat verandert niets.

 

Aan de andere kant, hoe werkt het?

nErrors = SWmoddoc.SaveAs(BestandsnaamPDF)    BestandsnaamPDF=045/1-2014-A

 

 

Wat moeten we tussen haakjes hebben?

Ik vind het niet en ik begrijp niet echt wat er op internet staat.

Zoals hierboven vermeld, moet uw PDFFileName-variabele de bestandsextensie bevatten!

Dus voor you.pdf

En misschien ook het pad?

 

Probeer het allebei.

Ik heb momenteel niet de mogelijkheid om het te testen.

1 like

Ik heb de 2 geprobeerd, wetende dat de variabele "FileNamePDF" oorspronkelijk de extensie heeft, maar het blijft hetzelfde, het slaat het op in de map waar het bestand actief is.

Dus je hebt niet geprobeerd om het doelpad (waar je het wilt opslaan) op te nemen in FileNamePDF?

Omdat een "opslaan als" zonder het pad het opslaat in de map waar het originele deel is!

 

 

1 like

Het zal zijn:

nErrors = SWmoddoc.SaveAs(FileNamePathPDF & FileNamePDF)

 

Door ervoor te zorgen dat er een backslash is tussen de 2 (in de eerste variabele of de tweede, het maakt niet uit).

1 like

En voor mijn bericht van 15:47, het ging over het maken van de map, niet over het opslaan van de PDF:

 

Lucas P

15 juli 2014 - 15:47 uur

Ah, ik denk dat het komt omdat je niet de backslash aan het einde van je pad hebt!!

 

Voeg dit toe om dit te verifiëren:

 

Als right(FileNamePathPDF,1) = "\" dan

FileNamePathPDF = FileNamePathPDF & "\"

Einde als

 

Je moet het voor je regel zetten:

Als Dir$(FileNamePathPDF) = "" dan

1 like

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+

 

 

 

2 likes

Hallo aan jou,

 

Dus ik probeerde een beetje wat je me gaf Caronmaxime

 

Zon fs
Set fs = CreateObject("Scripting.FileSystemObject")

Als fs. FolderExists("c:\A\2014") dan
    Stoppen
Einde als

 

Aan de andere kant verliet ik mijn registratiefase door het volledige adres in te voeren.

 

EN HET WERKT !!

 

aan de andere kant en ja, er is gewoon een probleem, als de map bestaat, heb je "STOP" gemarkeerd, ik moet markeren wat zodat het de map niet opnieuw maakt en dat het normaal opslaat.

 

Ik voeg mijn code toe.

 

Zon fs

Set fs = CreateObject("Scripting.FileSystemObject")

Als fs. FolderExists(FileNamePathPDF) dan

    Stoppen

Einde als

       MkDir (FileNamePathPDF)

 

'------------------------------------------------------------------

'Test of het bestand al bestaat of bevestig

'en dan opnemen

 

    Als Dir$(FileNamePathPDF) = FileNamePDF Dan bestaat 'Het bestand bestaat al'

        Als MsgBox ("Het bestand: " & FileNamePDF & vbNewLine & " al bestaat. Wil je hem vervangen?", _

         vbOKCancel + vbUitroep) = vbOK Dan

            nErrors = SWmoddoc.SaveAs(BestandsnaamPadPDF + BestandsnaamPDF)

        Anders

            Als msgBox("PDF-bestand is niet gemaakt.", vbInformation) = vbOK sluit dan Sub '-------bericht en EXIT-------

        Einde als

    Anders

        Als msgbox("Bestand: " & FileNamePDF & vbNewLine & " gaat worden aangemaakt", vbOKCancel + vbInformation) = vbOK dan

            nErrors = SWmoddoc.SaveAs(BestandsnaamPadPDF + BestandsnaamPDF)

        Anders

            Als msgBox("PDF-bestand is niet gemaakt.", vbInformation) = vbOK sluit dan Sub '-------bericht en EXIT-------

        Einde als

    Einde als

    

Einde Sub

We moeten de tegenovergestelde voorwaarde testen:

Als fs. FolderExists(FileNamePathPDF) dan

 

Anders

       MkDir (FileNamePathPDF)

Einde als

2 likes

Perfect Lucas, het werkt!!

DANK U ALLEN VOOR UW HULP!!!