Hello
I don't understand what you're trying to do with the added line.
Also, as I already said in the first answer, if there is no record with the children's update settings, there will be no change to the record names of the files and subassemblies, hence the lack of visibility in Windows Explorer.
Hello
I'm trying to make the Windows filename match the component name.
And for me, I do make a backup see below
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swRootComp As SldWorks.Component2
Dim Children As Variant
Dim swChild As SldWorks.Component2
Dim SwSelData As SldWorks.SelectData
Dim ChildCount As Long
Dim oldName As String
Dim newName As String
Sun i As Long
Sun j As Long
Dim ParentName As String
Dim errorsRename As Long
Dim status As Boolean
Dim warnings As Long
Save As Long
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim bool As Boolean
Dim val As String
Dim valout As String
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
ParentName = Left(swModel.GetTitle, 7)
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 True
status = swModel.Save3(swSaveAsOptions_SaveReferenced, errorsSave, warnings)
End Sub
Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
Dim vChildComp as Variant
Dim swChildComp As Component2
Sun 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 TB UBound(vChildComp)
Set swChildComp = vChildComp(i)
TraverseComponent swChildComp, nLevel + 1
swChildComp.Select4 False, SwSelData, False
Set swModelChild = swChildComp.GetModelDoc2
Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' set the name of the configuration including the
If Not swCustProp Is Nothing Then
status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
If valout <> "" Then
newName = ParentName & "-" & "000" & j
errorsRename = swModel.Extension.RenameDocument(newName)
swChildComp.Name2 = newName
Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
j = d + 1
End If
End If
Next i
End Sub
capture.png
The line swChildComp.Name2 = newName does not add anything more than the renaming function already does.
For the screenshot, I don't see what's wrong. The file name is good.
All that remains is to check that the files are not open in read-only, I can only see that.
Yes because I renamed it by hand, but when I run my macro with an assembly somewhere, it doesn't give the same name as if the counter didn't act.
And when I rename a part by hand, by right-clicking rename the part, it changes the windows name but not the name of the component.
Is this normal?
I don't understand the problem or there is a subtlety with Swood that I don't master.
Well I'm a bit of a maniac and I find it confusing that the name displayed in the featuremanager is not the same as the name of the windows file. No?
Is there a command line that allows me to rename the name of the component so that I can match it with the name of the file directly ?
It's more about setting up the models in this case. In my case, filename = name displayed in the featuremanager.
All right
well I don't have the option to display the name of the file which seems weird to me...
capture.png
It's hidden in "Show component names". The component name is the same as the record name.
Otherwise, you should look in the general options at the external reference level if the option "Update component names when documents are replaced" is checked.
1 Like
Great, this option of external references was not checked :)!
I've been testing it on several assemblies since this morning, and I still have a sorry question^^
Are there cases where the rename function doesn't work?
Because here I have two parts that are not renamed, yet I pass the program in step by step it passes on them and triggers the line: errorsRename = swModel.Extension.RenameDocument(newName)
But don't rename it. Do you have an idea?
Have a good weekend
Hello
after intensive use of the macro. I notice that depending on the configuration of my parts I often have an error because we have both languages (default and default). How can we get past this error and take both cases into consideration?
Thanks in advance,
Have a nice day
Hello
I hadn't seen the first question.
For the renaming problem, you have to look at what the ErrorsRename variable returns and see in the help what this error corresponds to:
http://help.solidworks.com/2020/english/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swRenameDocumentError_e.html
For the rest, you have to add an additional check as in the code below:
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
Yes I had thought about it but already at the "swCust set.... " as it can't find the configuration it crashes and I don't know how to do it.
For the first question, it's actually that the part already existed in the explorer windows but was not in the assembly.
Hello
I think it comes from something else. Personally, I don't have any problems with the operation even if the configuration doesn't exist.
swCustProp remains empty and therefore there is no renaming or anything else on the file concerned.
Has the code been embedded as-is in your macro or has it been modified to integrate into your code?
Hello Cyril,
I post all my code. I put two loops because if I have already renamed my pieces it didn't work so I rename them first with a counter (1,2,3,4...) then I rename them with the ruler.
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swRootComp As SldWorks.Component2
Dim Children As Variant
Dim swChild As SldWorks.Component2
Dim SwSelData As SldWorks.SelectData
Dim ChildCount As Long
Dim oldName As String
Dim newName As String
Sun j As Long
Sun h As Long
Dim ParentName As String
Dim errorsRename As Long
Dim status As Boolean
Dim warnings As Long
Save As Long
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim bool As Boolean
Dim val As String
Dim valout As String
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
ParentName = Left(swModel.GetTitle, 7)
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
h = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 True
status = swModel.Save3(swSaveAsOptions_SaveReferenced, errorsSave, warnings)
End Sub
Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
Dim vChildComp as Variant
Dim swChildComp As Component2
Dim swModelChild As SldWorks.ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim val As String
Dim valout As String
Sun i As Long
Dim status2 As Boolean
Dim val1 As String
Dim valout1 As String
vChildComp = swComp.GetChildren
For i = 0 TB UBound(vChildComp)
Set swChildComp = vChildComp(i)
TraverseComponent swChildComp, nLevel + 1
swChildComp.Select4 False, SwSelData, False
Set swModelChild = swChildComp.GetModelDoc2
Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' put the name of the configuration including the
If Not swCustProp Is Nothing Then
status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
status2 = swCustProp.Get4("HARDWARE", False, val1, valout1)
If valout <> "" Or valout1 <> "" Then
newName = h
errorsRename = swModel.Extension.RenameDocument(newName)
Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsRename
h = h + 1
End If
End If
Next i
For i = 0 TB UBound(vChildComp)
Set swChildComp = vChildComp(i)
TraverseComponent swChildComp, nLevel + 1
swChildComp.Select4 False, SwSelData, False
Set swModelChild = swChildComp.GetModelDoc2
Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") ' set the name of the configuration including the
If Not swCustProp Is Nothing Then
status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
status2 = swCustProp.Get4("HARDWARE", False, val1, valout1)
If valout <> "" Or valout1 <> "" Then
newName = ParentName & "-000" & j
If Len(newName) > 12 Then
newName = Left(newName, 8) & Right(newName, 4)
End If
errorsRename = swModel.Extension.RenameDocument(newName)
Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
j = d + 1
End If
End If
Next i
End Sub
I haven't checked it yet, but in the first approach, I think the problem comes from the second loop.
The swChild variable is probably flushed after the first run is passed.
Hello Cyril,
swChild is not reset to nothing, I don't understand how it would be empty.
Hello
Personally, I have no problem with this macro. As it stands, I don't see what's blocking (I have files that don't have any named configuration like the ones targeted and it goes on without any problem).
What is the error message being reported?
Hello
I found a solution with GetActiveConfiguration so I take all the configurations into account no translation problems.
Hello Cyril,
I did some more tests and I have an example that I attach in a ZIP file.
I have the impression that it doesn't go over all the files of the assembly and I really don't understand why... In the end, my holidays were not :D!
Thank you for your help in advance,
Have a nice day
Vincent
1500000-0000.ziprenaming.swp