Macro pdf-opname met foutafhandeling

Hallo, ik gebruik momenteel de volgende code om een Europarlementariër in PDF op te slaan

longstatus = Part.SaveAs3(FilePath + Bestandsnaam + ".PDF", 0, 0)

 

Geen problemen aan deze kant BEHALVE wanneer de genoemde PDF al open is en dus op dit moment niet wordt overschreven, de solidworks en geblokkeerd en wacht voor onbepaalde tijd tot de pdf weer wordt overschreven, ik weet niet of mijn probleem erg begrijpelijk is, maar als iemand een oplossing heeft, ben ik geïnteresseerd :)

U moet een foutbeheer in uw macro doorlopen

Of een lus met een geldigheidsduur.

Je vindt het gemakkelijk te vinden op programmeerforums

2 likes

Persoonlijk heb ik een lang VBA-programma gebruikt om dit te doen... dus ik ga niet alles bij je terugbrengen;)

Maar voor het deel dat je interesseerde, mijn regel was iets anders, maar ik vroeg me af of ik op een reeds bestaand bestand wilde schrijven en gaf aan dat het onmogelijk was om te schrijven als het al geopend was.

 

Dus, ik denk dat het daar wel mee moet werken:)

 

boolstatus = swpdfext. Opslaan(namePDF, 0, 0, swPDF, IErrors, IWarnings)

 

met

Dim swpdfext als SldWorks.ModelDocExtension

Dim swPDF als SldWorks.ExportPdfData

Dim swpdfext als SldWorks.ModelDocExtension

Dim IErrors zo lang

Dim IWarnings zo lang

Dim boolstatus als Booleaanse

 

Stel swpdfext = swdoc in. Extensie

Stel swPDF in = swapp. GetExportFileData(1)

Stel swpdfext = swdoc in. Extensie

 

namePDF = FilePath & newname & ".pdf"

FilePath is de recordmap

Newname is de naam van je bestand

En als de opening van de pdf alleen-lezen is. Verpletteren zou geen probleem moeten zijn.

Dank je wel todescocoin37coin & Bart☺

voor je antwoorden, maar niets helpt, de macro loopt vast zolang het PDF-bestand niet is gesloten, ik heb geprobeerd een fout af te handelen, maar het reageert ook niet :/

Hallo

Ik denk dat de onderstaande link je zou moeten kunnen helpen:

http://www.cpearson.com/excel/IsFileOpen.aspx

Hallo

Mogelijk om dit bijvoorbeeld te doen:

        beveiligde virtuele bool IsFileLocked (FileInfo-bestand)
        {
            FileStream-stroom = null;
            proberen
            {
                stroom = bestand. Openen (Bestandsmodus.Openen, FileAccess. Lezen, FileShare. Geen);
            }
            vangst (IOException)
            {
                retourneer waar;
            }
            eindelijk
            {
                if (stroom != null)
                    Stroom. Sluiten();
            }
            retourneer onwaar;
        }

als volgt te worden genoemd:

           ModelDoc2 SWPart = null;
            SWPart = ((ModelDoc2)(SolidWorksMacro.swapp. ActiveDoc));
            Maak de pdf op het bureaublad
            string namePDF = tekenreeks. Leeg;
            namePDF = Systeem. Omgeving. GetFolderPath(Systeem.Omgeving. Speciale map. Bureaublad) + "\\test.pdf";
            
            FileInfo namePDFinfo = nieuwe FileInfo(naamPDF);
            if (IsFileLocked(naamPDFinfo))
            {
                Berichtbox. Show ("Alleen-lezen");
                terugkeer;
            }
            SWPart. OpslaanAs(naamPDF);

 

Sorry dat het C# is (dus te vertalen naar vba) maar het principe is:

1°) Maak een functie aan waarmee u weet of het bestand wordt gebruikt.

2°) Test of het bestand wordt gebruikt voordat u het als PDF opslaat.

Vriendelijke groeten

Dank je wel Cyril.f 

 

Dit geeft de volgende code

Als IsFileOpen(FilePath + Bestandsnaam + ". DWG") = Waar Dan
MsgBox "Het "Bestand & FilePath + FileName +". DWG wordt momenteel gebruikt door een gebruiker en kan daarom niet worden overschreven."
Anders
longstatus = Part.SaveAs3(FilePath + FileName + ". DWG", 0, 0)
Einde als

aan te passen volgens DWG of PDF zonder te vergeten een module toe te voegen met de inhoud van Cyril's link.f