Ich möchte die Benennung meiner Layer in SOLIDWORKS automatisieren.
In meinem Beispiel haben wir eine Reihe von Layern, die wir nicht mehr verwenden, die aber in alten Flugzeugen vorhanden sind.
Wenn ich die alten Pläne retuschieren möchte, möchte ich alle Layer bis auf einige Layer löschen (Bemaßungen, Anmerkungen, Zeichnung, IndexA, Index B Index....)
Ich weiß, wie man alle Ebenen löscht, aber einige nicht ausschließt.
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
Ich habe das Makro Schritt für Schritt ausgeführt, das Makro geht von Für jeden zum Ende des Subs, ohne zu berücksichtigen , was dazwischen liegt (unten unterstrichen).
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
Können Sie die Frage klären: "Gibt es einen Parameter, um eine bestimmte Ebene zu aktivieren, wenn es im Hintergrundplan keine Ebene gibt, die bearbeitet werden soll?"