OK
nou, ik heb niet de mogelijkheid om de naam van het bestand weer te geven, wat me raar lijkt...
capture.png
OK
nou, ik heb niet de mogelijkheid om de naam van het bestand weer te geven, wat me raar lijkt...
Het is verborgen in "Componentnamen weergeven". De naam van de component is hetzelfde als de naam van de record.
Anders moet u in de algemene opties op extern referentieniveau kijken als de optie "Componentnamen bijwerken bij het vervangen van documenten" is aangevinkt.
Geweldig, deze optie van externe verwijzingen is niet :) aangevinkt!
Ik heb het sinds vanmorgen op verschillende assemblages getest en ik heb nog steeds een spijtige vraag^^
Zijn er gevallen waarin de hernoemingsfunctie niet werkt?
Omdat ik hier twee delen heb die niet worden hernoemd, maar ik geef het programma stap voor stap door, het geeft ze door en activeert de regel: errorsRename = swModel.Extension.RenameDocument(newName)
Maar hernoem het niet. Heb je een idee?
Fijn weekend
Hallo
na intensief gebruik van de macro. Ik merk dat ik, afhankelijk van de configuratie van mijn onderdelen, vaak een foutmelding heb omdat we beide talen hebben (standaard en standaard). Hoe kunnen we deze fout achter ons laten en beide gevallen in overweging nemen?
Bij voorbaat dank,
Fijne dag
Hallo
De eerste vraag had ik niet gezien.
Voor het hernoemingsprobleem moet je kijken naar wat de variabele ErrorsRename retourneert en in de help zien waar deze fout mee overeenkomt:
http://help.solidworks.com/2020/english/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swRenameDocumentError_e.html
Voor de rest moet je een extra vinkje toevoegen zoals in de onderstaande code:
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
Ja, ik had er wel over nagedacht, maar al bij de "swCust set.... " omdat het de configuratie niet kan vinden, crasht het en ik weet niet hoe ik het moet doen.
Voor de eerste vraag is het eigenlijk dat het onderdeel al bestond in de vensters van de verkenner, maar niet in de assemblage zat.
Hallo
Ik denk dat het van iets anders komt. Persoonlijk heb ik geen problemen met de bediening, zelfs als de configuratie niet bestaat.
swCustProp blijft leeg en daarom is er geen hernoeming of iets anders op het betreffende bestand.
Is de code ingesloten zoals deze is in uw macro of is deze gewijzigd om in uw code te integreren?
Hallo Cyril,
Ik post al mijn code. Ik heb twee lussen gezet omdat als ik mijn stukken al heb hernoemd, het niet werkte, dus ik hernoem ze eerst met een teller (1,2,3,4...) en daarna hernoem ik ze met de liniaal.
Optie Expliciete
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swRootComp als SldWorks.Component2
Dim Kinderen Als Variant
Dim swChild As SldWorks.Component2
Dim SwSelData als SldWorks.SelectData
Dim ChildCount zo lang
Dim oldName als tekenreeks
Dim newName als tekenreeks
Zon j Zo lang
Zon h Zo lang
Dim ParentName als tekenreeks
Dim foutenHernoem zo lang
Dim status Als Booleaans
Dim waarschuwingen zo lang
Bespaar zo lang
Dim swModelDocExt als ModelDocExtension
Dim swCustProp als CustomPropertyManager
Dim bool als Booleaanse
Dim val als snaar
Dim valout als snaar
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
ParentName = Links(swModel.GetTitle, 7)
Stel swRootComp in = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
h = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 Waar
status = swModel.Save3(swSaveAsOptions_SaveReferenced, foutenOpslaan, waarschuwingen)
Einde Sub
Sub TraverseComponent(swComp als SldWorks.Component2, nLevel zo lang)
Dim vChildComp als variant
Dim swChildComp als component2
Dim swModelChild As SldWorks.ModelDoc2
Dim swCustProp als CustomPropertyManager
Dim val als snaar
Dim valout als snaar
Zon i Zo lang
Dim status2 Als Booleaans
Dim val1 Als String
Dim valout1 als snaar
vChildComp = swComp.GetChildren
Voor i = 0 TB UBound(vChildComp)
Stel swChildComp in = vChildComp(i)
TraverseComponent swChildComp, nLevel + 1
swChildComp.Select4 Onwaar, SwSelData, Onwaar
Stel swModelChild in = swChildComp.GetModelDoc2
Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' zet de naam van de configuratie inclusief de
Zo niet, dan is swCustProp niets
status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
status2 = swCustProp.Get4("HARDWARE", Onwaar, val1, valout1)
Als valout <> "" Of valout1 <> "" Dan
newName = h
errorsRename = swModel.Extension.RenameDocument(newName)
Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsRename
h = h + 1
Einde als
Einde als
volgende i
Voor i = 0 TB UBound(vChildComp)
Stel swChildComp in = vChildComp(i)
TraverseComponent swChildComp, nLevel + 1
swChildComp.Select4 Onwaar, SwSelData, Onwaar
Stel swModelChild in = swChildComp.GetModelDoc2
Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' stel de naam van de configuratie in, inclusief de
Zo niet, dan is swCustProp niets
status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
status2 = swCustProp.Get4("HARDWARE", Onwaar, val1, valout1)
Als valout <> "" Of valout1 <> "" Dan
newName = Oudernaam & "-000" & j
Als Lin (newName) > 12 dan
newName = Links(nieuweNaam, 8) & Rechts(nieuweNaam, 4)
Einde als
errorsRename = swModel.Extension.RenameDocument(newName)
Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
j = d + 1
Einde als
Einde als
volgende i
Einde Sub
Ik heb het nog niet gecontroleerd, maar bij de eerste benadering denk ik dat het probleem uit de tweede lus komt.
De swChild-variabele wordt waarschijnlijk gespoeld nadat de eerste run is gepasseerd.
Hallo Cyril,
swChild is niet gereset naar niets, ik begrijp niet hoe het leeg zou zijn.
Hallo
Persoonlijk heb ik geen probleem met deze macro. Zoals het er nu uitziet, zie ik niet wat er blokkeert (ik heb bestanden die geen benoemde configuratie hebben zoals de beoogde en het gaat zonder enig probleem door).
Wat is de foutmelding die wordt gemeld?
Hallo
Ik heb een oplossing gevonden met GetActiveConfiguration dus ik houd rekening met alle configuraties zonder vertaalproblemen.
Hallo Cyril,
Ik heb nog wat tests gedaan en ik heb een voorbeeld dat ik bijvoeg in een ZIP-bestand.
Ik heb de indruk dat het niet alle dossiers van de vergadering doorneemt en ik begrijp echt niet waarom... Uiteindelijk waren mijn vakanties niet :D!
Bij voorbaat dank voor uw hulp,
Fijne dag
Vincent