Probleem met weergave van componentnaam

Hallo

 

Ik heb net een macro 'afgemaakt' die een automatische assemblage uitvoert en zelfs een onderdeel in een ander onderdeel vervangt, het tweede niveau van assemblage. Zodra de montage is voltooid, worden alle opgeslagen mijn stamboom de oude nummers weergegeven en wordt er niets bijgewerkt. Ik heb zelfs mijn computer opnieuw opgestart voor het geval het een cacheprobleem was. Op de computer van een collega heeft het de juiste weergave en er zijn zelfs de juiste referenties....

 

Mijn montage is goed, er is geen probleem behalve de weergave van de namen en het staat gewoon op mijn computer, na gebruik van mijn macro. Ik heb geen toegang meer tot het "referentie"-venster bij het openen van het genoemde bestand.

Ik trek me de haren uit mijn hoofd over dit 'kleine' probleempje, ik ben een beetje een perfectionist....

 

Met vriendelijke groet, Mandrake.


capture.png

Hallo

U moet overal tijdelijke bestanden hebben, Solidworks knippen en vervolgens proberen een systeemopschoning uit te voeren met Solidworks RX:

Vriendelijke groeten

Bedankt voor je snelle antwoord, geen verandering op mijn computer, ik herinner je eraan dat ik mijn computer in de tussentijd heb afgesloten en opnieuw heb opgestart, dus logischerwijs alle caches opruimen.

 

Vriendelijke groeten

 

 


capture.png

Hallo

Sorry voor het vorige antwoord, ik had het punt aan het einde van de zin "Mijn montage is goed, er is geen probleem behalve de weergave van de namen en het staat gewoon op mijn computer, na gebruik van mijn macro".

Ik leid af dat dit gebeurt na het gebruik van uw macro, maar wat als u de nieuwe assemblage, dus opgeslagen, op uw computer laadt zonder uw macro te gebruiken. En wat als je je macro gebruikt op de computer van je collega?

Vriendelijke groeten

Ik heb me ook slecht uitgedrukt, ik heb de macro maar één keer gebruikt. Sinds ik de assemblage open, heb ik altijd hetzelfde display, de beroemde 9800 in plaats van F90149800 naam en referentie van de assemblage in mijn F90149900.

 

Ik zal proberen duidelijker te zijn, zo eenvoudig is het niet! Vanmorgen heb ik de macro gelanceerd.

Het in elkaar zetten van mijn 8500, 9800, 8700, 9200 en 9900 onderdelen. Bestand 85 bestaat al , dus ik besluit het te vervangen, nog steeds in het proces van mijn macro. Om het opnemen van elk van mijn assemblages af te maken.

 

Op de computer van een collega is de weergave bij het openen van het bestand correct. De assemblage F90149900 samengesteld uit F90149800 en F90149200 .... Je snapt het idee. De toegang tot de ingestelde referentietabel en bestandsnamen zijn correct.

 

Aan de andere kant, op mijn computer wanneer ik het bestand F90149900 mijn boom opent toont 9800 en 9200 met daarin 9800 het F90148500 bestand (het bestand dat ik tijdens het macroproces heb vervangen door een ander).

Kan het 'referentievenster'  van het F90149900-bestand niet openen (alleen op mijn computer) 

 

Sinds vanmorgen heb ik geprobeerd de cache op te schonen met Rx, ik heb mijn computer opnieuw opgestart en ik weet niet meer wat ik moet doen :'(

 

Namelijk dat mijn basisbestanden, 8500, 8700, 9200, etc. heeft geen onderdeel en als ik de F90149900 open, zijn alle onderdeelbestanden zichtbaar. Er is dus alleen een probleem met de weergave van de naam in de boom op de computer die de macro start. 

 

Ik heb de macro nog niet geprobeerd op andere berichten, ik geef er de voorkeur aan om verspreidingsproblemen te voorkomen! Ik heb er genoeg van verspreid zonder het expres te doen;)

 

Ik hoop dat ik duidelijker was. Ik blijf tot uw beschikking!

 

Vriendelijke groeten

Hallo

Na een kleine test lukte het me om een deel van het probleem te reproduceren. Om dit op te lossen, probeer de functie ReloadOrReplace toe te voegen na elke opslag van een assembly, let op de recursieve parsing-functie van uw assembly, hier is een voorbeeld:

(EDIT) het voorbeeld verwijderd, er bleven enkele werkproblemen over.

Vriendelijke groeten

Een andere oplossing, hier is een voorbeeld van code die thuis wordt uitgevoerd op een assembly met meer dan 2 niveaus, de kopieën zijn goed gedaan en dit zonder weergavefouten zoals je misschien in de boom hebt. Het principe is om de zoon-assemblage onder een nieuwe naam op te slaan en  zijn vader onmiddellijk opnieuw te registreren, aan het einde van de cyclus registreer ik de vergadering op een hoger niveau opnieuw, ik sluit hem en dan open ik hem opnieuw:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim chemin As String
Dim asmTitle As String
Dim boolstatut As Boolean
Dim lErrors As Long
Dim lWarnings As Long

Sub main()
    Dim swModel As SldWorks.ModelDoc2
    Dim swConfMgr As SldWorks.ConfigurationManager
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    
    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swConfMgr = swModel.ConfigurationManager
    Set swConf = swConfMgr.ActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    
    chemin = "C:\Users\DRO\Desktop\Temp PDF\"
    asmTitle = swModel.GetTitle
    
    If swModel.GetType = SwConst.swDocASSEMBLY Then
        boolstatut = swModel.SaveAs3(chemin & "new-" & asmTitle, 0, 1)
        
        TraverseComponent swRootComp
        
        swModel.ForceRebuild3 True
    
        boolstatut = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, lErrors, lWarnings)
    
        swApp.CloseDoc swModel.GetTitle
        Set swModel = swApp.OpenDoc6(chemin & "new-" & asmTitle, 2, swOpenDocOptions_Silent, "", lErrors, lWarnings)
    End If
End Sub

Sub TraverseComponent(swComp As SldWorks.Component2)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swSelModelFils As SldWorks.ModelDoc2
    Dim swSelModelPere As SldWorks.ModelDoc2
    Dim i As Long
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        Set swSelModelFils = swChildComp.GetModelDoc2
        If swSelModelFils.GetType = 2 Then
            boolstatut = swSelModelFils.SaveAs3(chemin & "new-" & swSelModelFils.GetTitle, 0, 1)
            Set swSelModelPere = swComp.GetModelDoc2
            boolstatut = swSelModelPere.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, lErrors, lWarnings)
            TraverseComponent swChildComp
        End If
    Next i
End Sub

Vriendelijke groeten

Dit is inderdaad wat mijn macro in het begin deed, het opnemen van het kind, dan de vader enzovoort door op een 'logische' manier de boom in te gaan, het werkt zonder problemen en je krijgt de juiste referenties en de juiste weergave in de boom.  Maar toen ik een kind verving door een andere assemblage, De namen van de andere vergaderingen werden na registratie niet bijgewerkt. Het was alleen het uitzicht op de boom dat verkeerd was.

 

Bedankt dat je de tijd hebt genomen om te proberen het probleem op te lossen. Uw macro is leuk om alle componenten van een assemblage op twee niveaus onder een nieuwe naam op te slaan! Het is een goede oude Pack & Go;)

 

Iemand heeft de oplossing gevonden: ik heb het vakje 'componentnamen bijwerken wanneer documenten worden vervangen' niet aangevinkt :

 

Waarom zou je het simpel maken als je het ingewikkeld kunt maken =)

 

Aan de andere kant begrijp ik niet waarom de namen niet worden bijgewerkt de tweede keer dat ze de computer openen of de volgende dag, na het opnieuw opstarten van de computer, zeker een van de mysteries van SolidWorks.