Wstawianie makra PRT w zespole

Cze wszystkim

Mam poniżej makro, które działa lub nie w zależności od używanej linii (ścieżki pliku).

Dla ścieżki pliku, która jest skierowana do Z:\1 Plans 2021\MONTIFAUD SAS CHATEAU działa bardzo dobrze, otwiera plik, wkłada do mojego planu montażu i zamyka plik (nikiel).

Podczas gdy druga ścieżka pliku, która jest kierowana do Z:\SolidWorks\Library, nie występuje .

Jestem na tym samym serwerze, używam tego samego PRT, różni się tylko ścieżka

Czy masz jakieś wyjaśnienie, które możesz mi dać?

Czy w makrze w deklaracji zmiennych wystąpił błąd?

Celem tego makra jest późniejsze zintegrowanie go z formularzem użytkownika.

Z góry dziękuję.

Pozdrowienia.

MAKRO

Przyciemnij swPart jako SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Przyciemnij ścieżkę pliku jako ciąg
Dim swApp As Object
Przyciemnij część jako obiekt
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw swPart = swApp.ActiveDoc
Dim tmpObj jako ModelDoc2
Błędy przyciemnienia tak długo
filePath = "Z:\SolidWorks\Biblioteka\\ze stali nierdzewnej-TH.SLDPRT"
'filePath = "Z:\1 Plany 2021\MONTIFAUD SAS CHATEAU\Model 3D\\-Stal nierdzewna-TH.SLDPRT"
Set tmpObj = swApp.OpenDoc6(filePath, 1, 32, "", errors, longwarnings)
Ustaw część = swApp.ActivateDoc3(filePath, True, 0, błędy)
Dim swInsertedComponent jako komponent2
Set swInsertedComponent = swPart.AddComponent5(filePath, 0, "", False, "", 0, 0, 0)
swApp.CloseDoc filePath (ścieżka do pliku)
Koniec subwoofera
 

 

Witam
Oczywiście, że zamieniasz wartość w swojej zmiennej!
Spróbuj tego:

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

 

Witam

Dziękuję za odpowiedź.

Próbowałem tego, ale mam błąd wykonania typu 13 z niezgodnością typów.

Set swInsertedComponent = swPart.AddComponent5(Do wstawienia do bieżącego zespołu//, 0, "", False, "", 0, 0, 0)

W powyższym wierszu chcę mieć możliwość wstawienia do bieżącego zestawu części, która nie jest ważna lub znajduje się na serwerze lub lokalnie .

Nazywam moją część w "Z:\SolidWorks\Library\Screws\Stainless Steel-Screws-TH.SLDPRT" -->, którą wstawiam do wspólnego zespołu.

Pozdrowienia.

 

Witam

Wypróbuj ten fragment makra:

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

Pozdrowienia

1 polubienie

Tak naprawdę musimy wszystko przejrzeć!
Konieczne jest, aby otwierany plik był zespołem.

Spróbuj tego, dodając ścieżkę zestawu:

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 polubienie

Witam

Dziękuję wszystkim za współpracę, to właśnie d.Roger najlepiej odpowiedział na moją prośbę.

Mogę wywołać dowolną część zarówno z serwera, jak i z dysku lokalnego 

2 polubienia

Uważaj jednak, moje makro nie radzi sobie z możliwymi błędami, więc musisz pomyśleć o dodaniu tej słynnej obsługi błędów, często zaniedbywanej ... Z mojego punktu widzenia należy przeprowadzić co najmniej 4 kontrole:
1°) po wierszu "Set swApp = Application.SldWorks" musisz upewnić się, że dokument jest otwarty w oprogramowaniu i że ten dokument jest rzeczywiście zestawem.
2°) po wierszu "Ustaw swPart = swApp.ActiveDoc" należy upewnić się, że zestaw otwarty w SW nie jest nowym niezarejestrowanym zespołem.
3°) po wierszu "Ustaw swPart = swApp.ActiveDoc" należy upewnić się, że zestaw otwarty w oprogramowaniu nie jest tylko do odczytu.
4°) po wierszu "FilePath2 = "Z:\SolidWorks\Library\Screw\Screws-Inox-TH.SLDPRT"" musisz upewnić się, że ten plik istnieje.

Aby odpowiedzieć na wstępne pytania:
- Czy masz dla mnie jakieś wytłumaczenie? Tak, aktywowałeś obiekt "Part" za pomocą funkcji "ActivateDoc3", ale próbowałeś dodać komponent w obiekcie "swPart" za pomocą funkcji "AddComponent5".

- Czy w makrze w deklaracji zmiennych wystąpił błąd? brakuje jednorodności w deklaracji zmiennych, takich jak "SldWorks.ModelDoc2" lub "ModelDoc2" lub "Object" dla zmiennych tego samego typu (swPart, Part i tmpObj).

Są to błędy, które widzę dość często, ponieważ VBA jest dość elastyczny w wpisywaniu zmiennych, a także ze względu na kopię fragmentów kodu pobranych z prawej i lewej strony.

Pozdrowienia