All Forums
 Категория Visio
 Форум Вопросы и ответы
 Редактирование ShapeSheet через VBA
Author Previous Topic Topic Next Topic  

nnsav

21 Posts

Posted - 11/01/2011 :  12:30:40
Добрый день.
Уже более-менее освоился с ручным редактированием таблицы свойств фигуры, а вот сделать это через VBA не получается.
Если кто-нибудь не сочтет за труд и сделает простенький пример, буду очень признателен.
Для N выделенных объектов установить для координаты Y (Pin Y в таблице свойст фигуры) в значение:
текущее значение PinY+50.

Tumanov

Russia
1198 Posts

Posted - 11/01/2011 :  14:43:31
Sub ttt()
    Dim sel As Visio.Selection
    Dim shp As Visio.Shape
    Set sel = ActiveWindow.Selection
    For Each shp In sel
        shp.Cells("PinY") = shp.Cells("PinY") + 2
    Next
End Sub
Go to Top of Page

nnsav

21 Posts

Posted - 11/02/2011 :  08:26:01
Спасибо!!!
Go to Top of Page

nnsav

21 Posts

Posted - 11/04/2011 :  17:47:10
не могу понять еще один момент по данной теме:
выражение
shp.Cells("PinX").Formula = "=guard (PinY)"
успешно записывает в ячейку PinX шейпа формулу: guard (PinY)

но если попытаться аналогично сделать для ячейки Y:
shp.Cells("PinY").Formula = "=guard (PinY)"
получаю циклическую ссылку при запуске макроса.

Как сделать правильно для ячейки Y?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 11/04/2011 :  19:31:53
А зачем понадобилось такое извращение? Какого поведения шейпа Вы при этом хотите добиться?
Go to Top of Page

nnsav

21 Posts

Posted - 11/07/2011 :  07:46:47
Цель-заблокировать изменение координаты Y шейпа, причем если это делать именно через GUARD, то при копировании со страницы на страницу значение PinY принимает желаемое значение. Если же зажимать координату Y через "защиту", то при копировании шейпа на новую страницу его Y координата меняется.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 11/07/2011 :  16:16:38
Так копируйте не формулу, а значение. Например, вот так:
sh.Cells("PinY").Formula = "Guard(" & sh.Cells("PinY") & ")"
Тогда циклической ссылки не будет.
Go to Top of Page

9rey

Russia
30 Posts

Posted - 11/08/2011 :  08:05:40
а вот у меня такой вопрос:

quote:
shp.Cells("PinY") = shp.Cells("PinY") + 2


в этом выражении "+2" в каких единицах? т.е. значение ячейки PinY увеличивается на 2 чего? мм, см, пикселей?
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 11/08/2011 :  08:23:37  Visit Surrogate's Homepage
quote:
sh.Cells("PinY").Formula = "Guard(" & sh.Cells("PinY") & ")"


что-то у меня на Visio2003 такой код не идет - ошибка 424 (Object required) :(

quote:
в этом выражении "+2" в каких единицах? т.е. значение ячейки PinY увеличивается на 2 чего? мм, см, пикселей?

в vba visio единицы измерения только дюймы !
для задания размеров в мм их еще пресчитывать придется !


Edited by - Surrogate on 11/08/2011 08:44:59
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 11/08/2011 :  14:49:41
quote:
что-то у меня на Visio2003 такой код не идет - ошибка 424 (Object required) :(

Это я опустил назначение шейпа :)
Типа,
Dim sh As Visio.Shape
Set sh = ...
Скорее всего из-за этого.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)