Vraag over mijn macro

Als het nog steeds niet werkt, voeg dan spionnen toe zoals hier weergegeven:

http://www.tomshardware.fr/forum/id-1348092/tutoriel-excel-macro-vba-debogage.html

 

En wat zijn de waarden van de variabelen:

NaamBestandPDF 

PadNaamBestandPDF

 

 

Waar eindigt je macro?

1 like

re

 

Om te helpen bij het testen van een macro-> in de vergelijkingseditor, klikt u op "Weergave", op "Venster met lokale variabelen" > zie bijlage


editeur_de_macro_fenetre_variables_locales.png
2 likes

Onze berichten kruisen elkaar, sorry.

 

Het is raar dat "Opslaanals" niet goed werkt met de volledige bestandsnaam (pad+naam+extensie).

Hetzelfde geldt voor de bug met de map die al bestaat.

 

Probeer het met de opdracht "SaveAs" voor ModelDocExtension. Dit is degene die ik gebruik in mijn macro's.

Ga als volgt te werk om te rapporteren:

   Dim SWmodext als As SldWorks.ModelDocExtension

   Dim swExportPDFData     As SldWorks.ExportPdfData

Dim fouten              zo lang   
   Dim waarschuwingen            zo lang

en hoe je invloed kunt uitoefenen op:

   Stel SWmodext = SWmoddoc.Extension in

dan:

   nErrors = SWmodext.SaveAs(FileNamePathPDF, 0, 0, swExportPDFData, Fouten, waarschuwingen)

 

 

 

Voor mappenbeheer gebruik ik het FileSystemObject:

Dim oFSO                als Scripting.FileSystemObject   
Dim oFld                  als map   

 

   Set oFSO = Nieuwe Scripting.FileSystemObject

 

   Als oFSO.FolderExists(FileNamePathPDF) = Onwaar dan
        Stel oFld in = oFSO.CreateFolder(FileNamePathPDF)
    Einde als

2 likes

Dank je wel caronmaxime, erg handig dit venster!

 

Dus met je venster hebben mijn variabelen de waarde die ik ze wil geven, maar het werkt niet zoals ik wil.

 

hij zal het 2014-bestand voor mij maken, aan de andere kant, als het bestand al bestaat, stopt het bij de Mkdir-regel (1e punt dat ik niet begrijp)

 

en hij maakt het pdf-bestand voor mij, maar aan de andere kant in dezelfde map als het actieve bestand terwijl hij het in de map van 2014 zou moeten plaatsen (2e punt dat ik niet begrijp)

 

HELP!!

1 like

Zou de fout niet komen door het feit dat u een map test en een andere map maakt?

 

Als Dir$(FileNamePathPDF) = "" dan
MkDir BestandsNaamPDF

Einde als

 

PathFileNamePDF of moet hier 2 keer worden gebruikt, toch? Een keer voor de Dir$-test en een keer voor de MkDir?

3 likes

re re

 

Mathieu, naar mijn mening moet je   [ MkDir  FileNamePDF]  vervangen worden door    [MkDir FileNamePathPDF]

 

In uw macro-editor kunt u dubbelklikken op het trefwoord MkDir om het te selecteren en op F1 drukken. Hulp zal je in staat stellen om het te begrijpen.

re re re

 

maak de balans op, rekening houdend met de uitstekende aanbevelingen van Fgirard, en kijk misschien eens naar de vraag "mijn PDF DXF-macro: wat moet ik zeggen? " die ik heb gepubliceerd.

 

Anders is dit hoe ik te werk ga (zie bijlage) om een macro te debuggen wanneer deze mappen of bestanden maakt


capture_decran_sw_et_editeur_sw_et_explorer_windows.png

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!!!