Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 22:12

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 11:07 
Не в сети
Новичок

Зарегистрирован: 25 мар 2016, 17:19
Сообщений: 21
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
В общем, дело такое. хочу написать макрос, который бы перебирал все шейпы и выдавал имя слоя "Коробка". Как вы уже догадались, это часть макроса. Но доходя до определённого шейпа, выдает ошибку. возможно, доходит до объекта без слоя. как можно исправить?
Код:
Sub layer1()
Dim SH As Shape
For Each SH In ActivePage.Shapes
    If SH.Layer(1) = "Коробка" Then MsgBox SH.Layer(1)
Next SH
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 11:11 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Пишу с телефона. Без возможности проверки
Код:
If SH.Layer(1). Name = "Коробка"

PS а что у шейпа есть свойство Layer?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 11:21 
Не в сети
Новичок

Зарегистрирован: 25 мар 2016, 17:19
Сообщений: 21
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
PS а что у шейпа есть свойство Layer?
ну, перебирало названия слоев, если
Код:
Sub layer1()
Dim SH As Shape
For Each SH In ActivePage.Shapes
    MsgBox SH.Layer(1)
Next SH
End Sub
пока не доходило до определенного шейпа. без слоя который. вопрос в принципе только в одном - как не перебирать шейпы без слоя? или, как вариант, перебирать шейпы внутри одного слоя.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 12:24 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
ага, есть оказывается ! в shapesheet™ я такой ячейки не нашел…
вообще принадлежность шейпа к слою определяется в ячейке Layermember
в ячейке записаны номера слоев на листе к которым принадлежит шейп
нумерация слоев начинается с нуля.
разделителем (в случае если шейп одновременно принадлежит нескольким слоям) является ;

если шейп не принадлежит никакому слою, то в этой ячейке будут кавычки ""
Код:
if Len(SH.CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).Formula) = 2 then msgbox "данная фигура не принадлежит, ни одному из слоев"

ветки форума где раскрывалась тема слоёв:
Скрыть объекты при щелчке на другой объект
Скрывать группу элементов схемы
Появление и исчезание слоя (слоёв). Анимация слоя (слоёв).
слои в вба
Выделение всех объектов на одном слое

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 12:56 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
koui писал(а):
как вариант, перебирать шейпы внутри одного слоя.
создать Selection
Shishok в сообщении #5960 писал(а):
то можно и попроще
Код:
Sub SelectLayer()
ActiveWindow.Selection = ActiveWindow.Page.CreateSelection(3, 256, "Имя_Слоя")
End Sub
и потом делать перебор в селекшене
Код:
For Each SH In ActiveWindow.Selection
    Debug.Print SH.Name
    Next

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 13:09 
Не в сети
Новичок

Зарегистрирован: 25 мар 2016, 17:19
Сообщений: 21
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Shishok в сообщении #5961 писал(а):
Если надо выделить шейпы не принадлежащие ни к какому слою то:
Код:
Sub SelectLayer()
ActiveWindow.Page.CreateSelection(3, 256, "{Слои отсутствуют}")
End Sub
черная магия не работает(((( если шейпу задано "Слой отсутствует", то работает. но если шейп создан без слоя и никаких действий со слоем мы не делаем, то не работает. но работает, если задать значение равное не 2, а 0


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 13:24 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
koui писал(а):
но работает, если задать значение равное не 2, а 0
это в каком месте ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 13:27 
Не в сети
Новичок

Зарегистрирован: 25 мар 2016, 17:19
Сообщений: 21
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
это в каком месте ?

Код:
if Len(SH.CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).Formula) = 0 then msgbox "данная фигура не принадлежит, ни одному из слоев"

и вот следующий вопрос, даже два. никак не могу понять - как создать новый слой (если такого уже нет) и затем присвоить шейпу этот слой.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 13:38 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
про 2 или 0. если шейп создали у него по умолчанию нет секции LayerMember в этом случае будет 0.
если эту секцию добавить то Len(SH.CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).Formula) будет 2 (т.к. в ячейке будет написано "")
если шейп загнать в какой-то слой, а потом снова вернуть "не принадлежит слою" тоже будет 2

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 13:54 
Не в сети
Новичок

Зарегистрирован: 25 мар 2016, 17:19
Сообщений: 21
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
про 2 или 0. если шейп создали у него по умолчанию нет секции LayerMember в этом случае будет 0.
если эту секцию добавить то Len(SH.CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).Formula) будет 2 (т.к. в ячейке будет написано "")
если шейп загнать в какой-то слой, а потом снова вернуть "не принадлежит слою" тоже будет 2
ну это понятно, разобрался.
ситуация такая - шейпу надо задать слой. но он должен быть только один. то есть, если у шейпа уже есть слой, его надо убрать и поставить новый.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 15:25 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
koui писал(а):
ну это понятно, разобрался.
это я себе для напоминалки записал. ну и тем кто еще не разобрался
koui писал(а):
ситуация такая - шейпу надо задать слой. но он должен быть только один. то есть, если у шейпа уже есть слой, его надо убрать и поставить новый.
сделал тупо. сначала у шейпа сбрасывается принадлежность к слою. а потом шейп добавляется к нужному слою листа
Код:
Sub layer1()
Dim SH As Shape
Set SH = ActiveWindow.Selection.PrimaryItem
SH.CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).FormulaForceU = """"""
Dim ly As Layer
Set ly = ActivePage.Layers.ItemU("trash")
ly.Add SH, 0
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перебор шейпов в слое
СообщениеДобавлено: 30 мар 2016, 20:35 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
Наличие у шейпа слоя определяется LayerCount

Код:
Sub layer1()
Dim SH As Shape
For Each SH In ActivePage.Shapes
    If SH.LayerCount>0 then If SH.Layer(1) = "Коробка" Then MsgBox SH.Layer(1)
Next SH
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB