Ist eigentlich eh ziemlich simpel:
'chofmeister@dibau.at
Sub einrichtungsblock()
Dim neuerlayer As AcadLayer 'Variable "neuerlayer" für Layer
Dim lt As String 'um den Linientyp als Text anzusprechen
Dim bref As AcadBlockReference 'Als Blockreferenz dimensionieren
Dim ss As AcadSelectionSet 'Als Auswahlsatz festlegen
Dim ssets As AcadSelectionSets 'Als Auswahlsätze festlegen
Dim iSMode As Integer 'Als Integer definieren
Dim gpcode(2) As Integer '3 Werte als Integer
Dim datavalue(2) As Variant '3 Werte als Variant
Dim brefname As Variant
Dim b As AcadBlock
Dim blocks As AcadBlocks
Dim aent As AcadEntity
'Erstellung des neuen Layers:
Set neuerlayer = ThisDrawing.Layers.Add("E_S26") 'Layer E_S26 wird erstellt
lt = "CONTINUOUS" 'Einstellung des Linientyps
neuerlayer.LayerOn = True 'Layer einschalten
neuerlayer.color = 1 'Layerfarbe
neuerlayer.Linetype = lt 'Linientyp zuweisen
'Erstellung eines Auswahlsatzes
gpcode(0) = 0 'DXF Gruppencode: Elementtyp
datavalue(0) = "INSERT" 'DXF Elementtyp: Block
gpcode(1) = 8 'DXF Gruppencode: Layer
datavalue(1) = "EINRICHTUNG-SANITAER" 'DXF Layer: EINRICHTUNG-SANITAER
gpcode(2) = 67 'DXF Gruppencode: Modell/Papierbereich
datavalue(2) = 0 'DXF Bereich: Modell
Dim groupCode As Variant, dataCode As Variant 'Definieren der Variablen
groupCode = gpcode 'Zuweisung der Filtergruppen
dataCode = datavalue 'Zuweisung der Filtertypen
Set ssets = ThisDrawing.SelectionSets 'ssets = Summe aller Auswahlsätze in Zeichnung
For Each ss In ssets 'Eventuelle vorhandene Auswahlsätze löschen
If ss.name = "TMPSET" Then 'wenns schon einen mit dem Namen gibt - löschen
ss.Delete
End If
Next ss
Set ss = ThisDrawing.SelectionSets.Add("TMPSET") 'Neuen Auswahlsatz "TMPSET" anlegen
iSMode = acSelectionSetAll 'Auswahlmodus : Alles
ss.Select iSMode, , , groupCode, dataCode 'unter Verwendung von Filtern s.o.
Debug.Print ss.Count & " Blockreferenzen im Auswahlsatz" 'zur Kontrolle: Wieviele Bemassungen im Auswahlsatz
'Ändern des Einfügelayers
For Each bref In ss 'Für jede Blockreferenz im Auswahlsatz
brefname = bref.name 'Name der Blockreferenz
Debug.Print brefname 'zur Kontrolle
bref.layer = "E_S26" 'neuer Einfügelayer der Blockreferenz
bref.color = acByLayer 'neue Farbe der Blockreferenz
bref.Linetype = "ByLayer" 'neuer Linientyp der Blockreferenz
Next bref 'nächste Blockreferenz
Set blocks = ThisDrawing.blocks 'Dimensioniere Blocks als alle Blöcke in Zeichnung
'Ändern der Elementlayer
For Each b In blocks 'Für jeden Block in Blocks
If b.name = brefname Then 'Wenn der Blockname dem Blockreferenznamen entspricht dann
For Each aent In b 'für jedes Element im Block
aent.layer = "E_S26" 'Elementlayer
aent.color = acByLayer 'Elementfarbe
aent.Linetype = "ByLayer" 'Elementlinientyp
Next aent 'nächstes Element im Block
End If
Next b 'nächster Block
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP