PRT-Makro einfügen in Baugruppe

Hallo ihr alle

Ich habe das Makro unten, das funktioniert oder nicht, je nachdem, welche Zeile ich verwende (Dateipfad).

Für den Dateipfad, der auf Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU gerichtet ist, funktioniert es sehr gut, es öffnet die Schraubendatei, setzt die Schraube in meinen Montageplan ein und schließt die Schraubendatei (Nickel).

Während der andere Dateipfad, der auf Z:\SolidWorks\Library gerichtet ist, nicht passiert.

Ich bin auf dem gleichen Server, ich verwende das gleiche PRT, nur der Pfad ist unterschiedlich

Hast du eine Erklärung, die du mir geben kannst?

Gibt es einen Fehler im Makro bei der Deklaration von Variablen?

Der Zweck dieses Makros besteht darin, es später in Userform zu integrieren.

Vielen Dank im Voraus.

Herzliche Grüße.

MAKRO

Dim swPart As SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long
Dim filePath als Zeichenfolge
Dimmen swApp als Objekt
Teil als Objekt dimmen
Sub main()
Legen Sie swApp = Application.SldWorks fest
Legen Sie swPart = swApp.ActiveDoc fest
Dim tmpObj As ModelDoc2
Fehler so lange dimmen
filePath = "Z:\SolidWorks\Library\Schrauben\Edelstahlschrauben-TH.SLDPRT"
'filePath = "Z:\1 Pläne 2021\MONTIFAUD SAS CHATEAU\3D-Modell\Schrauben\Edelstahl-Schrauben-TH.SLDPRT"
Set tmpObj = swApp.OpenDoc6(filePath, 1, 32, "", Fehler, lange Warnungen)
Set Part = swApp.ActivateDoc3(filePath, True, 0, Fehler)
Dim swInsertedComponent als Komponente2
Set swInsertedComponent = swPart.AddComponent5(filePath, 0, "", False, "", 0, 0, 0)
swApp.CloseDoc DateiPfad
Ende Sub
 

 

Hallo
Natürlich ersetzen Sie den Wert in Ihrer Variablen!
Versuchen Sie Folgendes:

Sub Insert

Dim swPart As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long, errors, longwarnings As Long
Dim FilePath1, FilePath2 As String
Dim swApp As Object
Dim Part As Object
Dim tmpObj As ModelDoc2

Sub main()
Set swApp = Application.SldWorks
Set swPart = swApp.ActiveDoc

FilePath1 = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"
FilePath2 = "Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU\Modele 3D\Visserie\Vis-Inox-TH.SLDPRT"

Set tmpObj = swApp.OpenDoc6(FilePath1, 1, 32, "", errors, longwarnings)
Set Part = swApp.ActivateDoc3(FilePath1, True, 0, errors)

Dim swInsertedComponent As Component2
Set swInsertedComponent = swPart.AddComponent5(FilePath2, 0, "", False, "", 0, 0, 0)
swApp.CloseDoc FilePath1

End Sub

 

Hallo

Vielen Dank für Ihre Antwort.

Ich habe es versucht, aber ich habe einen Ausführungsfehler vom Typ 13 mit Typinkompatibilität.

Set swInsertedComponent = swPart.AddComponent5(Soll in die aktuelle Baugruppe eingefügt werden//, 0, "", False, "", 0, 0, 0)

In der obigen Zeile möchte ich in der Lage sein, das Teil in die aktuelle Baugruppe einzufügen, das nicht wichtig ist oder sich auf dem Server oder lokal befindet .

Ich nenne mein Teil in "Z:\SolidWorks\Library\Screws\Stainless Steel-Screws-TH.SLDPRT" -->, das ich in eine gemeinsame Baugruppe einfüge.

Herzliche Grüße.

 

Hallo

Probieren Sie dieses kleine Makro aus:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swPart As SldWorks.ModelDoc2
Dim tmpObj As SldWorks.ModelDoc2
Dim errors As Long
Dim longwarnings As Long
Dim FilePath1 As String
Dim FilePath2 As String

Sub main()

Set swApp = Application.SldWorks
Set swPart = swApp.ActiveDoc

FilePath1 = swPart.GetPathName
FilePath2 = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"

Set tmpObj = swApp.OpenDoc6(FilePath2, 1, 32, "", errors, longwarnings)
Set swPart = swApp.ActivateDoc3(FilePath1, True, 0, errors)

Dim swInsertedComponent As Component2
Set swInsertedComponent = swPart.AddComponent5(FilePath2, 0, "", False, "", 0, 0, 0)

swApp.CloseDoc FilePath2

End Sub

Herzliche Grüße

1 „Gefällt mir“

In der Tat müssen wir alles überprüfen!
Es ist zwingend erforderlich, dass es sich bei der geöffneten Datei um eine Assembly handelt.

Versuchen Sie dies, indem Sie den Pfad einer Assembly hinzufügen:

Dim swApp As Object
Dim swModel As ModelDoc2
Dim swAssy As AssemblyDoc
Dim swcomponent As SldWorks.Component2
Dim errors, warnings As Long
Dim FilePath1, FilePath2, FileName, AssemblyTitle As String

Sub Main
    Set swApp = Application.SldWorks
    FilePathASM = "Chemin de ton assemblage"
    FilePathPart = "Z:\SolidWorks\Bibliotheque\Visserie\Vis-Inox-TH.SLDPRT"
    FileName = "Vis-Inox-TH.SLDPRT"

    Set swModel = swApp.OpenDoc6(FilePathASM, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
    AssemblyTitle = swModel.GetTitle
    Set tmpObj = swApp.OpenDoc6(FilePathPart, swDocPART, 0, "", errors, warnings)

    If warnings = swFileLoadWarning_ReadOnly Then
        MsgBox "This file is read-only."
    End If 

    If tmpObj Is Nothing Then
        MsgBox "Cannot locate the file."
    End If

    Set swModel = swApp.ActivateDoc3(AssemblyTitle, True, swUserDecision, errors)
    Set swAssy = swModel
    Set swcomponent = swAssy.AddComponent5(FileName, swAddComponentConfigOptions_CurrentSelectedConfig, "", False, "", -1, -1, -1)
End Sub

 

1 „Gefällt mir“

Hallo

Vielen Dank an alle für Ihre Mitarbeit, es war d.Roger, der am besten auf meine Anfrage reagiert hat.

Ich kann jeden Teil entweder vom Server oder von der lokalen Festplatte aufrufen

2 „Gefällt mir“

Seien Sie jedoch vorsichtig, mein Makro behandelt mögliche Fehler nicht, so dass Sie darüber nachdenken müssen, diese berühmte Fehlerbehandlung hinzuzufügen, die oft vernachlässigt wird ... Aus meiner Sicht sind mindestens 4 Überprüfungen vorzunehmen:
1°) Nach der Zeile "Set swApp = Application.SldWorks" muss sichergestellt werden, dass ein Dokument in der SW geöffnet ist und dass es sich bei diesem Dokument tatsächlich um eine Assembly handelt.
2°) Nach der Zeile "Set swPart = swApp.ActiveDoc" müssen Sie sicherstellen, dass es sich bei der in der SW geöffneten Assembly nicht um eine neue, nicht registrierte Assembly handelt.
3°) Nach der Zeile "Set swPart = swApp.ActiveDoc" müssen Sie sicherstellen, dass die in der SW geöffnete Assembly nicht schreibgeschützt ist.
4°) nach der Zeile "FilePath2 = "Z:\SolidWorks\Library\Screws\Screws-Inox-TH.SLDPRT"" muss sichergestellt werden, dass diese Datei existiert.

Um Ihre ersten Fragen zu beantworten:
- Hast du eine Erklärung für mich? Ja, Sie haben das Objekt "Part" mit der Funktion "ActivateDoc3" aktiviert, aber Sie haben versucht, die Komponente mit der Funktion "AddComponent5" im Objekt "swPart" hinzuzufügen.

- Gibt es einen Fehler im Makro bei der Deklaration von Variablen? Es mangelt an Homogenität bei der Deklaration von Variablen wie "SldWorks.ModelDoc2" oder "ModelDoc2" oder "Object" für Variablen desselben Typs (swPart, Part und tmpObj).

Dies sind Fehler, die ich ziemlich oft sehe, weil die VBA bei der Typisierung von Variablen recht flexibel ist und auch wegen der Kopie von Code-Schnipseln, die von rechts und links abgerufen werden.

Herzliche Grüße