[CDR 2017-2021] Количество слоев

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Досталось "по наследству" много файлов, во многих не понятно для чего созданы слои и объекты размещены хаотично на этих слоев.
Есть и однослойные документы.
Сделал макрос в секции ThisMacrosStorage, который при открытии считает кол-во слоев и если слоев больше одного - выдает инфу о кол-ве слоев

Код:
Private Sub GlobalMacroStorage_DocumentOpen(ByVal Doc As Document, ByVal FileName As String)
    
    Dim lrs As Layer, i As Integer
    i = -1
    For Each lrs In ActiveDocument.ActivePage.Layers
        i = i + 1
    Next lrs
    
    If i > 1 Then MsgBox ("Кол-во слоев " + CStr(i))

End Sub

В таком виде он работает правильно, но не могу понять, почему даже если слой один - выдает сообщение что их два. Именно поэтому сделал i=-1, изначально было 0. Откуда берется еще один слой?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Просто сферический индийский код из парижской палаты мер и весов 'fp'
Этот безумный цикл эквивалентен свойству ActiveDocument.ActivePage.Layers.Count
И таки Направляющие - тоже слой, который убрать нельзя, вы же видите в диспетчере слоев!
 
  • Спасибо
Реакции: izrukvruki

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Ступил два раза!!! Исправлюсь!!! 'alil'
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
  • Спасибо
Реакции: izrukvruki

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Мне просто интересна инфа о том, что есть несколько слоев. Удалять ничего не нужно мне.

мне не нравится когда слои есть, а для чего они - не понятно.
сам на одном слое макет, на другом - служебную инфу
или на одном объекты, на другом текст...

а когда на одном объекты, текст, на втором снова объекты и текст и служебная инфа, на третьем вообще много скрытых объектов...
 

dastin

Некромант-любитель
12 лет на форуме
Сообщения
2 131
Реакции
2 027
это может быть результатом импорта чего-нибудь слоистого ... например пдф из ГИСов всяческих очень богаты на слои
 

lev

Модератор
20 лет на форуме
Сообщения
2 142
Реакции
2 066
Вместо подсчета слоёв по одному можно было использовать MsgBox ActiveDocument.ActivePage.Layers.Count. А вот в цикле можно было собрать имена слоёв.
Код:
Sub qqq()
  Dim lrs As Layer
  For Each lrs In ActiveDocument.ActivePage.Layers
    s = s & vbCr & lrs.Name
  Next lrs
  MsgBox ActiveDocument.ActivePage.Layers.Count & s
End Sub
 
  • Спасибо
Реакции: izrukvruki

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

lev

Модератор
20 лет на форуме
Сообщения
2 142
Реакции
2 066
Ужастно!!! У меня и Option Explicit отключен.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А представляешь, если где то глобальная есть? '8()'
 

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Вместо подсчета слоёв по одному можно было использовать MsgBox ActiveDocument.ActivePage.Layers.Count. А вот в цикле можно было собрать имена слоёв.
Код:
Sub qqq()
  Dim lrs As Layer
  For Each lrs In ActiveDocument.ActivePage.Layers
    s = s & vbCr & lrs.Name
  Next lrs
  MsgBox ActiveDocument.ActivePage.Layers.Count & s
End Sub

Еще тогда неплохо пройтись по всем страницам...
Свою задачу я решил (+ удобно, что макрос автоматом запускается при открытии), большое спасибо, усложнять смысла не вижу