Wanneer een .PDF plan in de werkplaats wordt geopend voor overleg en ik een wijziging moet aanbrengen. op ditzelfde vliegtuig direct op Solidworks, en ik gebruik deze PDF-macro, crasht Solidworks en sluit het, omdat het het PDF-bestand niet kan overschrijven omdat het al open is.
Wanneer ik echter probeer het plan op te slaan door te .PDF met behulp van "Bestand"-"Bewaar sous-.PDF", verschijnt het bericht "Dit bestand is alleen-lezen" en zorgt ervoor dat Solidworks niet crasht.
Zou het mogelijk zijn om een regel code in mijn macro op te halen waarmee ik dit bericht kan krijgen als het bestand al open is, en Solidworks niet laat crashen?
Hier is de macro die .PL me had voorgesteld (nogmaals bedankt!):
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
Hiermee haalt u het volledige pad van het huidige document op, inclusief de bestandsnaam: PathName = UCase(Deel.GetPathName)
myModelView dimmen als object Stel myModelView = Deel.ActiveView in myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Deel.EditRebuild3() Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 longstatus = Part.SaveAs3(Vervangen(UCase(PathName), "SLDDRW", "PDF"), 0, 0) Einde Sub
U moet controleren of het bestand open is om een waarschuwing msgbox te maken.
Zie deze pagina :
https://support.microsoft.com/en-us/kb/153058
En hier is de code:
Sub hoofd() Stel swApp = Toepassing.SldWorks in Deel instellen = swApp.ActiveDoc Hiermee haalt u het volledige pad van het huidige document op, inclusief de bestandsnaam: PathName = UCase(Deel.GetPathName) myModelView dimmen als object Stel myModelView = Deel.ActiveView in myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Deel.EditRebuild3() Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 Als GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF") en vbReadOnly dan MsgBox "Alleen-lezen bestand" Anders longstatus = Part.SaveAs3(Vervangen(UCase(PathName), "SLDDRW", "PDF"), 0, 0) Einde als Einde Sub
Hartelijk dank voor uw antwoord .PL, maar de macro werkt niet, blijkbaar is er een probleem met deze regel: Als GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF") En vbReadOnly Dan
Door een kijkje te nemen op de link die je me ook hebt gegeven, zag ik dat er een punt zou moeten zijn voor de ReadOnly, maar ik probeerde het toe te voegen en het veranderde niets.
Bij voorbaat dank, en sorry voor mijn totale onwetendheid in VBA-codering...
Ik heb de code gewijzigd voor het geval het PDF-bestand niet bestaat, hier is het:
Sub hoofd() Stel swApp = Toepassing.SldWorks in Deel instellen = swApp.ActiveDoc Hiermee haalt u het volledige pad van het huidige document op, inclusief de bestandsnaam: PathName = UCase(Deel.GetPathName) myModelView dimmen als object Stel myModelView = Deel.ActiveView in myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Deel.EditRebuild3() Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2
Als Dir(Replace(UCase(PathName), "SLDDRW", "PDF")) <> "" dan Als GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF")) en vbReadOnly dan MsgBox "Alleen-lezen bestand" Anders longstatus = Part.SaveAs3(Vervangen(UCase(PathName), "SLDDRW", "PDF"), 0, 0) Einde als
Sorry, kleine fout van mijn kant, het zal me leren om niet genoeg te testen!
Nu zou het moeten werken!
Sub hoofd() Stel swApp = Toepassing.SldWorks in Deel instellen = swApp.ActiveDoc Hiermee haalt u het volledige pad van het huidige document op, inclusief de bestandsnaam: PathName = UCase(Deel.GetPathName) myModelView dimmen als object Stel myModelView = Deel.ActiveView in myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Deel.EditRebuild3() Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2 Deel.WeergaveZoomtofit2
Als Dir(Replace(UCase(PathName), "SLDDRW", "PDF")) <> "" dan Als GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF")) en vbReadOnly dan MsgBox "Alleen-lezen bestand" Anders longstatus = Part.SaveAs3(Vervangen(UCase(PathName), "SLDDRW", "PDF"), 0, 0) Einde als
Anders longstatus = Part.SaveAs3(Vervangen(UCase(PathName), "SLDDRW", "PDF"), 0, 0)
Bedankt voor deze nieuwe macro, het werkt inderdaad, maar onder bepaalde voorwaarden, en om dit op te lossen weet ik niet of ik degene ben die iets moet repareren of dat de macro kan worden verbeterd.
Als ik een tekening open en een nieuwe PDF maak, geen bestand.
Aan de andere kant, wanneer ik de PDF van de tekening probeer te genereren terwijl deze open is, crasht Solidworks zoals voorheen.
Dit probleem wordt opgelost wanneer ik de PDF open nadat ik het selectievakje "Attributen: Alleen-lezen" in de eigenschappen heb aangevinkt. Op dit punt werkt de macro en verschijnt het bericht "Alleen-lezen bestand" wanneer ik de PDF probeer te genereren. Pas na het sluiten van de PDF, in een poging om te regenereren, verschijnt nog steeds het bericht "Alleen-lezen bestand", alsof het bestand open blijft, terwijl dat niet het geval is. Ik slaag erin het probleem op te lossen door "Attributen: Alleen-lezen" in de eigenschappen uit te vinken, en dan wil de PDF regenereren.
Is het aan mij om lees-/schrijfrechten in te stellen of moet de macro worden aangepast?
Hallo Manu67, ik kon je macro niet testen, want als ik op de link van je antwoord klik, opent het een onbeschrijfelijke code voor mij, ik heb hetzelfde probleem voor alle bijlagelinks in het bericht op het forum.
Als ik me niet vergis, is het alleen-lezen attribuut niet direct uitneembaar op pdf-bestanden.
We moeten kijken naar de bestandsverwijderingsfuncties van de bestandsmethode (zie: http://warin.developpez.com/access/fichiers/#LI-D-2) en de gewenste behandeling toepassen op basis van het resultaat (als fout --> alleen-lezen bestand).
Ik heb precies hetzelfde probleem, ik ga je oplossing testen om te zien of het werkt en ik zou de bankschroef nog verder willen duwen. Wanneer een pdf-plan wordt geopend in Windows Verkenner in het voorbeeldvenster, ziet de back-up er goed uit, maar is het pdf-bestand onleesbaar. Een verklaring?
manu67, ik heb je code niet geprobeerd omdat ik het niet begrijp (en omdat ik graag begrijp wat ik doe...)
Dus ik deed wat onderzoek en ik kwam met dit:
https://support.microsoft.com/en-us/kb/291295
Om hiermee af te ronden (want fout opgave 75): http://stackoverflow.com/questions/12599322/check-if-a-file-is-already-open-vba
Het werkt goed, het detecteert of de PDF op een andere computer is geopend. Aan de andere kant heb ik de geopende pdf's gewoon op een ander werkstation laten staan en het vertelt me nog steeds dat ze open zijn... om te zien of het vanzelf terugkomt, of het aan de server ligt....