Solidworks API: Erstellen eines virtuellen Teils in einer Baugruppe

Hallo Community.

 

Um ein Makro in meinem Unternehmen zu entwickeln, möchte ich die Erstellung von virtuellen Teilen in der Montage automatisieren.

Es scheint mir jedoch nicht möglich zu sein, den Code zu entwickeln, der diese Aktion zulässt.

 

Unten ist der Beginn meiner Recherche.

 

Dimmen swApp als Objekt
Sub main()

Legen Sie swApp = Application.SldWorks fest
Legen Sie swmodel = swApp.ActiveDoc fest.
Dim swModelTitle As SldWorks.ModelDoc2


     
'-------------------------------------------------------------------------------------------------------------
"Überprüfen, ob ein ASM-Dateidokument geöffnet ist
'-------------------------------------------------------------------------------------------------------------

     Wenn nicht, ist swmodel nichts, dann", wenn eine SW-Datei geöffnet wird
     Debug.Print "eine SW-Datei wird geöffnet" 'dann msg debug und weiter

     Ansonsten: MsgBox ("Es ist keine SW-Datei geöffnet, bitte öffnen Sie eine Assembly und starten Sie das Makro neu") 'wenn keine SW-Datei geöffnet => msg
Sub beenden
    Ende, wenn
    

     
     type_doc als Zeichenfolge dimmen
     type_doc = swDocumentTypes_e.swDocPART
     Debug.Print type_doc
     
     Wenn swmodel. GetType = swDocumentTypes_e.swDocASSEMBLY Dann
     Debug.Print "Die geöffnete Datei ist eine Baugruppendatei"
     Ansonsten: Debug.Print "Die geöffnete Datei ist keine Assembly-Datei, bitte öffnen Sie eine Assembly, und starten Sie das Makro neu"
     MsgBox ("die geöffnete Datei ist keine Assemblerdatei, bitte öffnen Sie eine Assembly und starten Sie das Makro neu")
Sub beenden
      Ende, wenn
      

'----------------------------------------------------------------------------------------------------------
'Abrufen des Dateinamens
'----------------------------------------------------------------------------------------------------------
Pfad als Zeichenfolge dimmen
name_asm als Zeichenfolge dimmen
name_asm = swmodel. GetTitle (Englisch)
Pfad = SWMODEL. GetPathName (Englisch)
Debug.Print "Dateiname: " & name_asm
Debug.Print "Pfad:" & Pfad
Sonne nom_asm
nom_asm = Links(name_asm, (InStrRev(name_asm, ".", -1, vbTextCompare) - 1))
Debug.Print nom_asm


'-----------------------------------------------------------------------------------------------------------
"Erstellung von Aufdruckteilen
'-----------------------------------------------------------------------------------------------------------


nom_pe als Zeichenfolge dimmen
nom_pe = "EMP_" & nom_asm
Debug.Print "Teilename Impressum: " & nom_pe
Sonne new_part

boolstatus = SWMODEL. Extension.SelectByID2("Face Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0) 'Auswählen der Flächenebene
new_part = swmodel. InsertNewVirtualPart(boolstatus, nom_pe)

sw-Modell verwenden. ForceRebuild3 True
sw-Modell verwenden. AnsichtZoomtofit2


Ende Sub

 

 

Der Fehlercode, der in der Zeile new_part = ....

 

Hast du eine Ahnung, was ich falsch mache???

Ich gebe zu, dass mich das Beispiel der API-Hilfe ratlos zurücklässt...

 

 

 

 


sans_titre.png

Hallo

Eine Grundregel der Programmierung besteht darin, Ihre Variablen korrekt zu deklarieren.

In diesem Fall die Zeile, in der ein Fehler auftritt:

Sun zum Auftakt der Erklärung

New_part den Variablennamen

as zum Festlegen des Typs

... Ein Typ

 

Ihnen fehlt also der Typ. Ich denke, das ist die Art von Stück, die man in der Hilfe sehen sollte...

1 „Gefällt mir“

Hallo

A priori vermischen Sie den Namen mit der Komponente selbst.

Umtausch:

nom_pe als Zeichenfolge dimmen

In 

nom_pe als Komponente dimmen2 

Und löschen Sie die Zeile:

nom_pe = "EMP_" & nom_asm

Bearbeiten: Sehen Sie sich das korrigierte Makro in PJ an.

Bearbeiten 2:

Wenn Sie den Namen ändern möchten, müssen Sie wie folgt vorgehen:

nom_pe.Name2 = EMP_" & nom_asm

Ich habe das Makro auf dem PC aktualisiert.


macro_piece_virtuelle.pdf
1 „Gefällt mir“

@ remrem

Ich bin ein Anfänger im Prog und habe noch große Lücken

Ich dachte, dass es nicht darum geht, eine... überließ dem Prog die Wahl, den am besten geeigneten Variablentyp zu wählen.

 

@.PL

Ich bekomme immer noch die gleiche Fehlermeldung.

 

Befindet sich der Fehler in derselben Zeile?

Gibt es in der 3D von SolidWorks eine Seite?

Bearbeiten: Versuchen Sie die Änderung als Anhang.

Wenn ein Fehler auftritt, geben Sie bitte an, in welcher Zeile.


macro_piece_virtuelle.txt

Ja, immer in der gleichen Zeile.

Ich habe die vordere Ebene, die in der vorherigen Zeile ausgewählt ist.

 

Das ist der Grund, warum Sie sich angewöhnen müssen, alle Variablen korrekt zu deklarieren.

Wenn wir die Variablen nicht deklarieren, verwenden sie den Standardvariantentyp. Dies kann zu Funktions- und Leistungsproblemen führen...

1 „Gefällt mir“

immer irrtümlich die Zeile darunter

new_part = swmodel. InsertNewVirtualPart(boolstatus, nom_pe)
 

Laufzeitfehler 13 Typkonflikt

 

 

Dumme Frage, die sicherlich nichts mit dem Problem zu tun hat, aber das "_" ist keine Fehlerquelle?

Ich glaube nicht, weil ich es in einem früheren Makro, das ich früher gemacht habe, häufig verwendet habe.

 

Ich hatte keine allzu großen Probleme.

 

Schließlich kann ich aufgrund meiner Unerfahrenheit nichts garantieren...

 

1 „Gefällt mir“

Ich werde es wahrscheinlich erst morgen Abend testen können.

 @.PL

 

Keine Sorge, es ist schon sehr schön, mir zu helfen...

Ich werde meine Forschungen und Tests fortsetzen, egal was passiert, und werde posten, wenn es sich weiterentwickelt.

 

 

Guten Abend

Wenn man sich die API-Hilfe ansieht, sind die Variablen e-types im Parameter nicht gut.

Die richtige Handschrift ist meiner Meinung nach die in der angehängten Datei (getestet und funktionsfähig).


correction_macro_piece_virtuelle.txt

@lyric.

 

In der Tat funktioniert es wunderbar.

Ein großes Dankeschön an Sie.

Im Moment gebe ich zu, dass ich das Warum und das Wie nicht wirklich verstehe. Ich werde mir diese Codezeilen ansehen, um die Vor- und Nachteile zu verstehen.)  

 

Danke noch einmal

 

Glücklicher Vater

Hallo Happydad,

Um das Verständnis zu verstehen, wird ein kurzer Blick auf die API-Hilfe , indem Sie die Funktion InsertNewVirtualPart als Suchkriterium verwenden , weitgehend erklären, woher das Problem kam.

Der Typ der Variablen, die von dieser Funktion als Parameter erwartet wird, wird erläutert und daher kommt das Problem (erster inkompatibler Parameter).

Der txt-Punkt des Liedtextes funktioniert nicht, wenn ich den Text in ein leeres Makro in vba kopiere (pb von Akzenten unter anderem).

Kann bitte jemand die .swp oder .swb posten??

' Das funktionale Makro gibt dies an, wenn es fest ;)

Dimmen swApp als Objekt
Sub main()
Legen Sie swApp = Application.SldWorks fest
Legen Sie swmodel = swApp.ActiveDoc fest.
Dim swModelTitle As SldWorks.ModelDoc2
'-------------------------------------------------------------------------------------------------------------
"Überprüfen, ob ein ASM-Dateidokument geöffnet ist
'-------------------------------------------------------------------------------------------------------------
     Wenn nicht, ist swmodel nichts, dann", wenn eine SW-Datei geöffnet wird
     Debug.Print "eine SW-Datei wird geöffnet" 'dann msg debug und weiter
     Ansonsten: MsgBox ("Es ist keine SW-Datei geöffnet, bitte öffnen Sie eine Assembly und starten Sie das Makro neu") 'wenn keine SW-Datei geöffnet => msg
Sub beenden
    Ende, wenn
     type_doc als Zeichenfolge dimmen
     type_doc = swDocumentTypes_e.swDocPART
     Debug.Print type_doc
     Wenn swmodel. GetType = swDocumentTypes_e.swDocASSEMBLY Dann
     Debug.Print "Die geöffnete Datei ist eine Baugruppendatei"
     Ansonsten: Debug.Print "Die geöffnete Datei ist keine Assembly-Datei, bitte öffnen Sie eine Assembly, und starten Sie das Makro neu"
     MsgBox ("die geöffnete Datei ist keine Assemblerdatei, bitte öffnen Sie eine Assembly und starten Sie das Makro neu")
Sub beenden
      Ende, wenn
'----------------------------------------------------------------------------------------------------------
'Abgerufenes©Artion des Dateinamens
'----------------------------------------------------------------------------------------------------------
Pfad als Zeichenfolge dimmen
name_asm als Zeichenfolge dimmen
name_asm = swmodel. GetTitle (Englisch)
Pfad = SWMODEL. GetPathName (Englisch)
Debug.Print "Dateiname: " & name_asm
Debug.Print "Pfad:" & Pfad
Sonne nom_asm
nom_asm = Links(name_asm, (InStrRev(name_asm, ".", -1, vbTextCompare) - 1))
Debug.Print nom_asm
'-----------------------------------------------------------------------------------------------------------
"Erstellung von Aufdruckteilen
'-----------------------------------------------------------------------------------------------------------
Dimmen nom_pe als SldWorks.Component2
Sun swSelMgr As SldWorks.SelectionMgr
Dim swPlaneFeature als SldWorks.Feature
Dim swPlane als SldWorks.RefPlane
Sonne new_part so lange
Dim boolstatus als boolescher Wert

Legen Sie swSelMgr = swmodel fest. Auswahl-Manager
boolstatus = SWMODEL. Extension.SelectByID2("Face Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0) 'Auswählen der Flächenebene
Set swPlaneFeature = swSelMgr.GetSelectedObject6(1; -1)
Legen Sie swPlane = swPlaneFeature.GetSpecificFeature2 fest

new_part = swmodel. InsertNewVirtualPart(swPlane, nom_pe)

nom_pe. Name2 = "Zu EMP_" & nom_asm

sw-Modell verwenden. ForceRebuild3 True
sw-Modell verwenden. AnsichtZoomtofit2
Ende Sub