SolidWorks VBA-API: Schreibgeschützt

Hallo

 

Ich entwickle ein VBA-Makro, mit dem Sie Lese- und Schreibzugriff auf Bibliotheksdateien abrufen können, die standardmäßig schreibgeschützt sind.

 

Ich schaffe es, die schreibgeschützte Datei in Windows zu entfernen (mit [SetAttr FileName, vbReadOnly] oder [SetAttr FileName, vbNormal]), aber dann muss ich die Komponente in SolidWorks mit Lese-/Schreibzugriff neu laden.

 

Mit einem Makro durch Training, indem ich "Datei > neu laden" ausführe und das Kontrollkästchen schreibgeschützt deaktiviere, erhalte ich nur:

Set Part = swApp.ActiveDoc
Part.FileReload

 

was keine Auswirkungen auf das Lesen und Schreiben hat.

 

Ich habe die API "ReloadOrReplace" gefunden, kann sie aber anscheinend nicht richtig verwenden:

ret = Teil.ReloadOrReplace(0, 0, 1)

hat nicht den gewünschten Effekt: Ich denke, es entspricht eher dem "Ersetzen eines Bauteils in einer Baugruppe".

 

 

Hat jemand eine Idee? Vielen Dank im Voraus

Es ist immer gefährlich, gelesene Dateien zu entsperren

Es muss einen Grund dafür geben, dass sie verschlossen sind!!

Hallo

ReloadorReplace ist die zu verwendende Methode (sie ersetzt FileReload)

Sie müssen den Namen der Datei angeben, die ersetzt/neu geladen werden soll, in der Hilfe habe ich dies gefunden:

 

In diesem Beispiel wird gezeigt, wie das aktive Modell mit der zuletzt gespeicherten Version des Modells neu geladen wird.

[...]

Dim swApp als SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim nRetVal so lange

 

Set swApp = CreateObject("SldWorks.Application")

Festlegen von swModel = swApp.ActiveDoc

' Schlägt bei Zeichnungen fehl, da die Funktionalität in der Benutzeroberfläche nicht unterstützt wird

nRetVal = swModel.ReloadOrReplace(Falsch, swModel.GetPathName, Wahr)

Ich habe noch nicht getestet, also muss ich es bestätigen

2 „Gefällt mir“

Danke y.pacquelet , ich werde das morgen testen, aber ich glaube, ich habe es schon so benutzt!

 

Zu Ihrer Information , unsere Bibliothek ist schreibgeschützt, um zu verhindern, dass jeder sie versehentlich ändert.

Zum Beispiel haben wir eine einzige fortlaufende Datei mit vielen Konfigurationen (Teilefamilie), wodurch 200 verschiedene Dateien vermieden werden.

Wenn Sie ein Lager hinzufügen möchten, müssen Sie die schreibgeschützte Funktion entfernen... Aber wir haben es danach wieder zurückgelegt!

Hallo ins Forum.

Hallo Lucas.

Seien Sie vorsichtig, es ist nicht zu ratsam, einen besseren Raum mit vielen Konfigurationen zu haben. Vor allem bei einem Turnover.

Die Größe Ihrer Datei kann explodieren, nachdem alle Konfigurationen angezeigt wurden.

Herzliche Grüße

 

Julianisch

Vielen Dank für den Rat, das Unternehmen arbeitet seit 2006 so, bevor ich ankam...

 

Hier ist ein Makro, das das aktive Dokument neu lädt, wenn es sich um ein Teil handelt, oder die ausgewählte Komponente, wenn es sich um eine Baugruppe handelt

 

 

Option Explizit

 

Dim swApp als SldWorks.SldWorks

Sub main()

Dim swModel                 As SldWorks.ModelDoc2   

Dim swPart                  als SldWorks.PartDoc   

Dim swAss                   As SldWorks.AssemblyDoc   

Dim nRetVal                 As swComponentReloadError_e   

    

    Set swApp = CreateObject("SldWorks.Application")

    Festlegen von swModel = swApp.ActiveDoc

 

    Case swModel.GetType auswählen

    Box swDocumentTypes_e.swDocPART

        Legen Sie swPart = swModel fest

        swModel.ForceReleaseLocks

        nRetVal = swModel.ReloadOrReplace(Falsch, swModel.GetPathName, Wahr)

        

    Box swDocumentTypes_e.swDocASSEMBLY

        " Wir testen, ob eine Komponente ausgewählt ist

        Dim blUnSelected As Boolean

        Festlegen von swAss = swModel

        Dim swSelectionMgr As SldWorks.SelectionMgr

        Festlegen von swSelectionMgr = swModel.SelectionManager

        Wenn swSelectionMgr.GetSelectedObjectCount2(0) = 0, dann blUnSelected = True

        if swSelectionMgr.GetSelectedObjectType3(1, 0) <> swSelectType_e.swSelCOMPONENTS then blUnSelected = True

        

        Wenn blUnSelected dann

            MsgBox "Bitte wählen Sie eine Komponente aus", vbInformation

            Sub beenden

        Ende, wenn

        

        ' Wir rufen die ausgewählte Komponente ab

        Dim swComponent als SldWorks.Component2

        Set swComponent = swSelectionMgr.GetSelectedObject6(1, 0)

        

        " Wir laden es auf

        Dim swDoc As SldWorks.ModelDoc2

        Set swDoc = swComponent.GetModelDoc2

        

        swDoc.ForceReleaseLocks

        nRetVal = swDoc.ReloadOrReplace(Falsch, UCase(swDoc.GetPathName), Wahr)

     Ende Auswahl

       

     ' Bestätigungsmeldung

     Dim stErr als Variante

     stErr = Array("In Ordnung", "Zugriffsfehler", "Versionsfehler", "Fehler bei geändertem nicht neu geladen", "Ungültige Option", _

                  "Fehler "Datei nicht gespeichert", "Fehler bei ungültiger Komponente", "Unerwarteter Fehler", "Fehler bei geringer Komponentenaufgabe", _

                  "Fehler "Datei existiert nicht", "Datei ungültig oder Fehler mit demselben Namen", "Dokument hat keine Ansicht", "Fehler beim Öffnen des Dokuments", _

                  "Dokumentereignisfehler", "Dokument nicht geändert", "Neuladen abbrechen")

     

     MsgBox CStr(stErr(nRetVal))

       

        

        

       " ' Oder wir ersetzen ihn

       ' Dim stPath als Zeichenfolge: stPath = ...

       ' Dim stConfigName als Zeichenfolge: stConfigName = ...

       ' Dim blRet als boolescher Wert

       ' blRet = swAss.ReplaceComponents(stPfad, stConfigName, Wahr, Wahr)

'

       " Wenn blRet, dann

           ' MsgBox "Austausch erfolgreich", vbInformation

       " Sonst

           ' MsgBox ' Ersatz fehlgeschlagen, vbExclamation

       " Ende, wenn

    

 

   

Ende Sub


replace.zip
8 „Gefällt mir“