PRT Macro Invoeging in Assemblage

Hoi allemaal

Ik heb de macro hieronder die wel of niet werkt, afhankelijk van welke regel ik gebruik (filepath).

Voor het bestandspad dat naar Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU is gericht, werkt het heel goed, het opent de schroefvijl, steekt de schroef in mijn montageplan en sluit de schroefvijl (Nikkel).

Terwijl het andere bestandspad dat naar Z:\SolidWorks\Library wordt geleid, niet gebeurt. 

Ik zit op dezelfde server, ik gebruik dezelfde PRT, alleen het pad is anders

Heb je een verklaring voor mij?

Is er een fout in de macro bij de declaratie van variabelen?

Het doel van deze macro is om deze later in Userform te integreren.

Bij voorbaat dank.

Vriendelijke groeten.

MACRO

Dim swPart As SldWorks.ModelDoc2
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Dim filePath als tekenreeks
Dim swApp als object
Deel dimmen als object
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Stel swPart in = swApp.ActiveDoc
Dim tmpObj als ModelDoc2
Dim fouten zo lang mogelijk
filePath = "Z:\SolidWorks\Bibliotheek\Schroeven\Roestvrijstalen schroeven-TH.SLDPRT"
'filePath = "Z:\1 Plannen 2021\MONTIFAUD SAS CHATEAU\3D-model\Schroeven\Roestvrij staal-Schroeven-TH.SLDPRT"
Stel tmpObj = swApp.OpenDoc6(filePath, 1, 32, "", fouten, lange waarschuwingen) in
Deel instellen = swApp.ActivateDoc3(filePath, True, 0, fouten)
Dim swInsertedComponent als component2
Stel swInsertedComponent = swPart.AddComponent5(filePath, 0, "", False, "", 0, 0, 0) in
swApp.CloseDoc filePath
Einde Sub
 

 

Hallo
Natuurlijk vervang je de waarde in je variabele!
Probeer het volgende:

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

Dank u voor uw antwoord.

Ik heb het geprobeerd, maar ik heb een type 13 uitvoeringsfout met type incompatibiliteit.

Stel swInsertedComponent in = swPart.AddComponent5(In te voegen in huidige assemblage//, 0, "", False, "", 0, 0, 0)

Op de bovenstaande regel wil ik het onderdeel in de huidige assemblage kunnen plaatsen dat niet belangrijk is of dat zich op de server of lokaal bevindt.

Ik noem mijn deel in "Z:\SolidWorks\Library\Screws\Stainless Steel-Screws-TH.SLDPRT" --> die ik in een gemeenschappelijke assemblage invoeg.

Vriendelijke groeten.

 

Hallo

Probeer dit stukje macro:

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

Vriendelijke groeten

1 like

Sterker nog, we moeten alles herzien!
Het is absoluut noodzakelijk dat het geopende bestand een assemblage is.

Probeer dit door het pad van een assembly toe te voegen:

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 like

Hallo

Bedankt allemaal voor jullie medewerking, het was d.Roger die het beste reageerde op mijn verzoek.

Ik kan elk onderdeel aanroepen vanaf de server of vanaf de lokale schijf

2 likes

Wees echter voorzichtig, mijn macro kan niet omgaan met mogelijke fouten, dus je moet nadenken over het toevoegen van deze beroemde foutafhandeling die vaak wordt verwaarloosd ... Naar mijn mening zijn er ten minste 4 controles die moeten worden uitgevoerd:
1°) na de regel "Set swApp = Application.SldWorks" moet je ervoor zorgen dat een document open is in SW en dat dit document inderdaad een assembly is.
2°) na de regel "Set swPart = swApp.ActiveDoc" moet je ervoor zorgen dat de assembly die in SW is geopend geen nieuwe niet-geregistreerde assembly is.
3°) na de regel "Set swPart = swApp.ActiveDoc" moet je ervoor zorgen dat de in SW geopende assemblage niet alleen-lezen is.
4°) na de regel "FilePath2 = "Z:\SolidWorks\Library\Screws\Screws-Inox-TH.SLDPRT"" moet je ervoor zorgen dat dit bestand bestaat.

Om uw eerste vragen te beantwoorden:
- Hebben jullie een verklaring voor mij? Ja, u heeft het object "Part" geactiveerd met de functie "ActivateDoc3", maar u heeft geprobeerd de component toe te voegen in het object "swPart" met de functie "AddComponent5".

- Zit er een fout in de macro bij de declaratie van variabelen? er is een gebrek aan homogeniteit in de declaratie van variabelen zoals "SldWorks.ModelDoc2" of "ModelDoc2" of "Object" voor variabelen van hetzelfde type (swPart, Part en tmpObj).

Dit zijn fouten die ik vrij vaak zie omdat de VBA vrij flexibel is in het typen van variabelen en ook vanwege het kopiëren van codefragmenten die van rechts en links worden opgehaald.

Vriendelijke groeten