Тема: Как организовать цикл по всем блокам?

Как организовать цикл по всем блокам (блоки с атрибутами) на layout1 что бы можно было посчитать их количество, количество атрибутов по каждому блоку, как прочитать Tag блока с атрибутами.

Re: Как организовать цикл по всем блокам?

Если речь идет имеено о блоках (AcadBlock), то надо искать не в Layou1, а в документе (например, ThisDrawing), а если об экземплярах блоков, вставленных в пространство бумаги (Layou1), то примерно так:
    Dim i As Integer, obj As Object, attrs As Variant, attr As AcadAttributeReference, k As Integer
    Dim Layout As AcadBlock
    Dim a As AcadBlockReference
    Set Layout = ThisDrawing.Blocks("*PAPER_SPACE")
    For i = 0 To Layout.Count - 1
        Set obj = Layout.Item(i)
        If StrComp(obj.ObjectName, "AcDbBlockReference", vbTextCompare) = 0 Then
            attrs = obj.GetAttributes
            For k = LBound(attrs) To UBound(attrs)
                Set attr = attrs(k)
                ... обрабатываем attr.TagString
                ...
            Next k
        End If
    Next i

Re: Как организовать цикл по всем блокам?

Да мне нужен цикл по экземплярам блоков на пространстве бумаги. по твоему коду layount.count у меня 2. И судя по циклу два одинаковых обьекта - AcDbViewport. А обьектов с именем AcDbBlockReference вообще нет, а экземпляры блоков есть на layout1. Походу у тебя цикл по I по количеству layout(1 и 2) получился, а не по числу блоков.

Re: Как организовать цикл по всем блокам?

http://vbamaker.narod.ru/Cod1.html
http://vbamaker.narod.ru/Cod2.html
Погляди там.

Re: Как организовать цикл по всем блокам?

Смотри внимательней:
Layout у меня - это БЛОК с именем *PAPER_SPACE (этот блок представляет собой ПЕРВЫЙ layout - layout1). Последующие именуются *PAPER_SPACEn (n=0,1,2,...).
Далее, Layout.Count - это количества объектов в блоке пространства бумаги, среди которых не только блоки. И если нет объектов с именем  AcDbBlockReference, значит нет и экземпляров блоков в первом пространстве бумаги.