Ik ben op zoek naar een manier om de naamgeving van mijn lagen in solidworks te automatiseren.
In mijn voorbeeld hebben we een aantal lagen die we niet meer gebruiken, maar die in oude vlakken bestaan.
Als ik de oude plannen wil retoucheren, wil ik alle lagen verwijderen, behalve enkele lagen (afmetingen, annotaties, tekening, IndexA, Index B Index....)
Ik weet hoe ik alle lagen kan verwijderen, maar er geen enkele kan uitsluiten.
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swLayerMgr As SldWorks.LayerMgr
Dim swLayer As SldWorks.Layer
Dim vLayerArr As Variant
Dim vLayer As Variant
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
swApp.SendMsgToUser2 "pas de documents ouvert", swMbWarning, swMbOk
Exit Sub
End If
If swModel.GetType <> 3 Then
swApp.SendMsgToUser2 "Ouvrir une mise en plan", swMbWarning, swMbOk
Exit Sub
End If
swModel.ViewZoomtofit2
Set swLayerMgr = swModel.GetLayerManager
vLayerArr = swLayerMgr.GetLayerList
Dim LayerList As Object
Set LayerList = CreateObject("Scripting.Dictionary")
LayerList.Add "cotations", 0
LayerList.Add "Annotations", 0
LayerList.Add "dessin", 0
LayerList.Add "IndiceA", 0
LayerList.Add "IndiceB", 0
For Each vLayer In vLayerArr
Set swLayer = swLayerMgr.GetLayer(vLayer)
If Not LayerList.Exists(swLayer.Name) Then
Debug.Print "Supprime " & swLayer.Name
swLayerMgr.DeleteLayer swLayer.Name
ElseIf swLayer.Name = "cotations" Then
swLayer.Color = 0
ElseIf InStr(swLayer.Name, "Indice") > 0 Then
swLayer.Color = 255
End If
Next
End Sub
Ik heb de macro stap voor stap uitgevoerd, de macro gaat van Voor elk naar einde sub zonder rekening te houden met wat er tussenin zit (hieronder onderstreept.
ForEach vLayer In vLayerArr
Set swLayer = swLayerMgr.GetLayer(vLayer)
IfNot LayerList.Exists(swLayer.Name) Then
Debug.Print "Supprime " & swLayer.Name
swLayerMgr.DeleteLayer swLayer.Name
ElseIf swLayer.Name = "cotations"Then
swLayer.Color = 0
ElseIf InStr(swLayer.Name, "Indice") > 0Then
swLayer.Color = 255EndIfNextEnd Sub
Kunt u de vraag verduidelijken: "is er een parameter om een specifieke laag te activeren als er geen laag in het achtergrondplan is dat moet worden verwerkt?"