Makro zum Öffnen einer Baugruppe

Hallo

 

Ich versuche, ein Makro zu erstellen, um eine Assembly zu öffnen. Ich wurde von dem von Dassault vorgeschlagenen Dokument inspiriert, aber ich kann es nicht tun...

Ich erhalte einen Laufzeitfehler vom Typ 13 (Typ Diskrepanz). Auf der Ebene meiner Linie:

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "," Fehler, Warnungen)

Ich hänge mein Makro an.... Können Sie mir sagen, was ich falsch mache?

Vielen Dank im Voraus für Ihre Hilfe

LSE

 

 

Sub main()

Dim swModel As ModelDoc2
Dim swModelDocExt als ModelDocExtension
Sun swSelMgr als AuswahlMgr
Dim partFile As String
Dim assemblyDatei als Zeichenfolge
Zeichnung dimmenDatei als Zeichenfolge
Dimmfehler Als Ganzzahl
Warnungen dimmen: Als Ganzzahl


Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc
myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized


' Öffnen Sie ein Baugruppendokument, und wählen Sie alle Komponenten in der Baugruppe aus.

assemblyFile = "C:\Programme\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"
Set swApp = CreateObject("SldWorks.Application")
Festlegen von swModel = swApp.GetOpenDocumentByName(assemblyFile)

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "," Fehler, Warnungen)
swModelDocExt = swModel.Erweiterung
swSelMgr = swModel.SelectionManager


Ende Sub

Mehrere Fehler in Ihrem Makro:

keine Deklaration für swApp:

Dim swApp als SldWorks.SldWorks

Dasselbe gilt für Part (Sie erhalten das aktive Dokument, machen es aber im Folgenden nicht verfügbar)

Darüber hinaus gibt es noch andere Fehler, dann weiß ich nicht, von welchem Modell du angefangen hast, aber es ist nicht das sauberste.

Probieren Sie dies aus und passen Sie es später an:

https://help.solidworks.com/2020/English/api/sldworksapi/Open_Assembly_Document_Example_VB.htm?verRedirect=1

1 „Gefällt mir“

Ich bin mir nicht sicher, ob Ihr Link am einfachsten ist.

Die einfache Version, solidworks, ist offen. Es öffnet die gewünschte Datei (fest geschriebener Pfad, PART-Version und nicht SLDASM

Siehe hier: https://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISldWorks~OpenDoc6.html

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim doc As SldWorks.ModelDoc2
Dim fileerror So lange
Dim filewarning So lange

Sub main()

    Legen Sie swApp = Anwendung fest. SldWorks (Englisch)
    swApp.Visible = Wahr
   

    ' Rufen Sie das aktuelle Arbeitsverzeichnis ab, bevor Sie das Dokument öffnen
    Debug.Print "Aktuelles Arbeitsverzeichnis ist " & swApp. GetCurrentWorkingDirectory
   

    Legen Sie doc = swApp fest. OpenDoc6("C:\Benutzer\Öffentliche\Dokumente\SOLIDWORKS\SOLIDWORKS 2018\Beispiele\tutorial\api\chair.sldprt", swDocPART, swOpenDocOptions_Silent, "", Dateifehler, Dateiwarnung)

Ende Sub

2 „Gefällt mir“

Ich habe mich für diese Version entschieden, weil er in seiner die Baugruppen in maskierter (option_silent)

Aber in der Tat ist Ihre einfachere @mandragore .

Hallo

Ich habe das Makro nicht ausprobiert, aber zu der Bemerkung: "I get a Run Time Error type 13 (typ mismatch)", wäre ich nicht überrascht, wenn es von der Eingabe der Variablen "Dim errors As Integer" und "Dim warnings As Integer" kommt, die normalerweise "Long" sein sollten. Natürlich müssen Sie auch überprüfen, ob die in der Variablen "assemblyFile" definierte Datei existiert.

Auf die Frage "Können Sie mir sagen, was ich falsch mache?" Ich werde mich nicht mit mir selbst aufhalten, da meine bevorstehenden Kollegen Sbadenis und Mandrake bereits begonnen haben, darauf zu reagieren... Aber ich stimme der Bemerkung "aber es ist nicht das sauberste" von Sbadenis zu, oder sogar noch mehr.

Herzliche Grüße

1 „Gefällt mir“

Vielen Dank für Ihre Antworten und Ihre Reaktionsfähigkeit!

 Ich habe gerade die 2 Vorschläge  getestet, aber ich verstehe es nicht, weil nichts passiert.

Ich bekomme keine Fehlermeldung mehr, aber die angeforderte Assembly öffnet sich nicht...

Haben Sie eine Idee...

Vielen Dank

 

Stellen Sie in beiden Fällen sicher, dass die Verknüpfung auf eine Baugruppe zeigt. Sonst öffnet es nichts.

Ich lade Sie ein, durch den Link einer Ihrer Versammlungen zu ersetzen.

Wenn meins nicht funktioniert, ist es normal, dass es 'Part' und nicht ASM angegeben ist. Ich habe es gerade mit Ihrer Variablen neu geschrieben und meinen Fehler korrigiert. 

 

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim doc As SldWorks.ModelDoc2
Dim fileerror So lange
Dim filewarning So lange

Dim assemblyDatei als Zeichenfolge

Sub main()

    Legen Sie swApp = Application.SldWorks fest
    swApp.Visible = Wahr
   

assemblyFile = "C:\Programme\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"

 

    Set doc = swApp.OpenDoc6(assemblyFile , 2, 1, "", fileerror, filewarning)

Ende Sub

 

dort sollte es funktionieren, ich habe 'swDocPART' durch 2 ersetzt, was 'swDocASSEMBLY' entspricht

Hallo ihr 2, 

Es funktioniert. Vielen Dank.

Das System akzeptiert die Eröffnung einer unabhängigen Versammlung, nicht jedoch die Eröffnung einer Versammlung, die ...

Lassen Sie mich das erklären

Ich bin in 130100, das aus 130101, 130102 besteht... 

Ich kann 110101 öffnen, aber nicht 130101 Jahr, in dem das Makro seit 130100 ausgeführt wird... Ist das normal?

Danke für deine Erleuchtung

Theoretisch ist die Baugruppe bereits geöffnet, so dass SolidWorks sie nicht erneut öffnen wird.

 

Sie müssen mit anderen Funktionen spielen, denke ich, Ihre 130101 aufhellen und Ihr Makro aktivieren, um zu sehen, ob es sich lösen lässt.

 

Es ist Informatik, Software kann sehr "dumm" sein. Es gibt viele verschiedene Funktionen für jede Funktion, ich habe eine '

swApp. CreateNewWindow', das Ihnen sicherlich helfen kann, die Software dazu zu zwingen, Ihre 130101 in einem neuen Fenster zu öffnen.

 

Danach haben wir viele Leute, die hier api machen, wenn Sie uns ein wenig mehr darüber aufklären, was Sie tun möchten und warum es jemand bereits tun kann, oder wir können Sie schneller anleiten.

Äh... Ich bin überhaupt kein Spezialist...

Also, was sollten wir anstelle von  "Set doc = swApp.OpenDoc6  .... "?

Wenn Ihre Unterbaugruppe bereits in der SW geöffnet ist, müssen Sie die Funktion "ActivateDoc3" verwenden, um sie in einem neuen SW-Fenster zu öffnen (in Wirklichkeit ist es Aktivieren, das Sie sagen müssen, da sie bereits geöffnet ist).

Herzliche Grüße

1 „Gefällt mir“

@mandragore: Ich stimme der Bemerkung "Es ist Informatik, Software kann sehr 'dumm' sein" nicht ganz zu .   Es gibt viele verschiedene Funktionen für jede Funktion", finde ich, dass APIs genau dann ziemlich logisch sind. In diesem Fall gibt es einen Unterschied zwischen "Öffnen" und "Aktivieren"...

Herzliche Grüße

Ich habe gerade getestet. Es funktioniert einwandfrei. Es war also eine Frage des Vokabulars. Nochmals vielen Dank. Ich fahre fort...