Zmienianie nazw wszystkich komponentów w złożeniu, nawet tych zawartych w podzespole

W porządku 

cóż, nie mam możliwości wyświetlenia nazwy pliku, co wydaje mi się dziwne...


capture.png

Jest on ukryty w sekcji "Pokaż nazwy komponentów". Nazwa składnika jest taka sama jak nazwa rekordu.

W przeciwnym razie należy zajrzeć do opcji ogólnych na poziomie odnośnika zewnętrznego, jeśli zaznaczona jest opcja "Aktualizuj nazwy komponentów po zastąpieniu dokumentów".

1 polubienie

Świetnie, ta opcja odniesień zewnętrznych nie była :) sprawdzana!  

Od dzisiejszego ranka testuję go na kilku zestawach i nadal mam przepraszam pytanie^^ 

Czy istnieją przypadki, w których funkcja zmiany nazwy nie działa? 

Ponieważ tutaj mam dwie części, których nazwy nie są zmieniane, a mimo to przekazuję program krok po kroku przechodzi na nich i uruchamia linię: errorsRename = swModel.Extension.RenameDocument(newName)

Ale nie zmieniaj jego nazwy. Masz pomysł? 

Miłego weekendu

Witam 

po intensywnym użytkowaniu makra. Zauważam, że w zależności od konfiguracji moich części często pojawia się błąd, ponieważ mamy oba języki (domyślny i domyślny). Jak możemy ominąć ten błąd i wziąć pod uwagę oba przypadki? 

Z góry dzięki, 

Miłego dnia 

Witam

Nie widziałem pierwszego pytania.

W przypadku problemu ze zmianą nazwy należy przyjrzeć się wartości zwracanej przez zmienną ErrorsRename i zobaczyć w pomocy, czemu odpowiada ten błąd: 

 Więcej informacji: http://help.solidworks.com/2020/english/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swRenameDocumentError_e.html

W pozostałej części musisz dodać dodatkowe sprawdzenie, jak w poniższym kodzie:

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As Component2
    Dim i As Long
    Dim swModelChild As SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String
    Dim valout As String

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Défaut") 'mettre le nom de la configuration comprenant la propriété
        If swCustProp Is Nothing Then
            Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default")
        End If
        If Not swCustProp Is Nothing Then
        status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
        If valout <> "" Then
            newName = NomParent & "-" & "000" & j
            errorsRename = swModel.Extension.RenameDocument(newName)
            swChildComp.Name2 = newName
            Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
            j = j + 1
        End If
        End If
    Next i
End Sub

 

Tak, myślałem o tym, ale już na "swCust set.... ", ponieważ nie może znaleźć konfiguracji, zawiesza się i nie wiem, jak to zrobić. 

W przypadku pierwszego pytania chodzi o to, że część już istniała w oknach eksploratora, ale nie była w złożeniu.

Witam

Myślę, że wynika to z czegoś innego. Osobiście nie mam żadnych problemów z działaniem nawet jeśli konfiguracja nie istnieje.

swCustProp pozostaje pusty i dlatego nie ma zmiany nazwy ani niczego innego w danym pliku.

Czy kod został osadzony w makrze w takiej postaci, w jakiej się znajduje, czy też został zmodyfikowany w celu zintegrowania z kodem?

Witaj Cyrylu, 

Publikuję cały mój kod. Umieściłem dwie pętle, ponieważ jeśli już zmieniłem nazwy moich elementów, to nie zadziałało, więc najpierw zmieniam ich nazwy za pomocą licznika (1,2,3,4...), a następnie zmieniam ich nazwy za pomocą linijki. 

Opcja jawna

Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swRootComp jako SldWorks.Component2
Przyciemnione dzieci jako wariant
Dim swChild jako SldWorks.Component2
Dim SwSelData jako SldWorks.SelectData
Dim ChildCount As Long
Dim oldName As String
Dim newName As Ciąg
Słońce j tak długo
Słońce h tak długo
Dim ParentName As Ciąg
Błędy przyciemnieniaZmień nazwę na tak długo
Stan przyciemnienia Jako wartość logiczna
Ostrzeżenia o przyciemnieniu tak długo
Oszczędzaj tak długo
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim bool As wartość logiczna
Dim val As String
Dim valout As String

Sub main()

Ustaw swApp = Application.SldWorks

Ustaw swModel = swApp.ActiveDoc
ParentName = Lewo(swModel.GetTitle, 7)
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
h = 1
Komponent trawersu swRootComp, 1
swModel.ForceRebuild3 Prawda
status = swModel.Save3(swSaveAsOptions_SaveReferenced, errorsSave, ostrzeżenia)

Koniec subwoofera


Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp jako wariant
    Dim swChildComp As Component2 (Komponent2)
    Dim swModelChild jako SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String (Ciąg dim val)
    Dim valout As String
    Słońce i tak długo
    
    Dim status2 As Boolean
    Dim val1 As String (Ciąg znaków
    Dim valout1 As String
    
    vChildComp = swComp.GetChildren
    Dla i = 0 TB UBound(vChildComp)
        Ustaw swChildComp = vChildComp(i)
        PrzechodzićKomponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' wpisz nazwę konfiguracji wraz z parametrem
        Jeśli nie, swCustProp jest niczym, to
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("SPRZĘT", Fałsz, val1, valout1)
            
            Jeśli wartość <> "" Lub wartość1 <> "" Wtedy
                newName = h
                errorsRename = swModel.Extension.RenameDocument(nowaNazwa)
                Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsRename
                h = h + 1
            Zakończ jeżeli:
        Zakończ jeżeli:
    Dalej i
    
        Dla i = 0 TB UBound(vChildComp)
        Ustaw swChildComp = vChildComp(i)
        PrzechodzićKomponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' ustawia nazwę konfiguracji wraz z parametrem
        Jeśli nie, swCustProp jest niczym, to
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("SPRZĘT", Fałsz, val1, valout1)
            
            Jeśli wartość <> "" Lub wartość1 <> "" Wtedy
                newName = ParentName & "-000" & j
                Jeśli Len(nowaNazwa) > 12, to
                    newName = Left(nowaNazwa, 8) i Right(nowaNazwa, 4)
                Zakończ jeżeli:
                errorsRename = swModel.Extension.RenameDocument(nowaNazwa)
                Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
                j = d + 1
            Zakończ jeżeli:
        Zakończ jeżeli:
    Dalej i
Koniec subwoofera

 

Jeszcze tego nie sprawdzałem, ale przy pierwszym podejściu myślę, że problem wynika z drugiej pętli.

Zmienna swChild jest prawdopodobnie opróżniana po przekazaniu pierwszego uruchomienia.

Witaj Cyrylu, 

swChild nie jest resetowany do niczego, nie rozumiem jak miałby być pusty.

Witam

Osobiście nie mam problemu z tym makrem. W tej chwili nie widzę, co jest blokowane (mam pliki, które nie mają żadnej nazwanej konfiguracji, takiej jak te docelowe i działa to bez żadnego problemu).

Co to jest zgłaszany komunikat o błędzie?

Witam 

Znalazłem rozwiązanie z GetActiveConfiguration, więc biorę pod uwagę wszystkie konfiguracje, bez problemów z tłumaczeniem. 

Witaj Cyrylu, 

Zrobiłem jeszcze kilka testów i mam przykład, który załączam w pliku ZIP. 

Mam wrażenie, że nie przechodzi przez wszystkie pliki montażu i naprawdę nie rozumiem dlaczego... W końcu moje wakacje nie były :D!  

Z góry dziękuję za pomoc, 

Miłego dnia 

Vincent 


1500000-0000.zip
zmiana nazwy.swp