All Forums
 Категория Visio
 Форум Вопросы и ответы
 Можно ли вычислить длину трассы через Шейп лист
Author Previous Topic Topic Next Topic  

PL

14 Posts

Posted - 06/30/2005 :  09:31:31
Я рисую схемутрассы.Колодцы соединяю коннекторами произвольной длины, но одинакового вида. Каждый коннектор имеет в Custom Properties строку "Протяженность трассы", где стоит подлинная длина отрезка кабеля (Number; 0,00).Как я могу просуммировать все ячейки Value, всех коннекторов. Желательно без программирования (я его не осилю). Можно ли создать произвольную фигуру и в ее Шейп листе сделать что-то ???, что бы высвечивался итог суммирования. Дамы и Господа, если можно ТО КУДА И ЧТО ПИСАТЬ?

Digitall

Russia
389 Posts

Posted - 06/30/2005 :  09:54:54  Visit Digitall's Homepage
quote:
Originally posted by PL

Я рисую схемутрассы.Колодцы соединяю коннекторами произвольной длины, но одинакового вида. Каждый коннектор имеет в Custom Properties строку "Протяженность трассы", где стоит подлинная длина отрезка кабеля (Number; 0,00).Как я могу просуммировать все ячейки Value, всех коннекторов. Желательно без программирования (я его не осилю). Можно ли создать произвольную фигуру и в ее Шейп листе сделать что-то ???, что бы высвечивался итог суммирования. Дамы и Господа, если можно ТО КУДА И ЧТО ПИСАТЬ?



topic.asp@TOPIC_ID=553.html
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  10:31:28
[/quote]
topic.asp@TOPIC_ID=553.html
Я видела это обсуждение. Спасибо. Решается только макросом, а через шейп лист - нельзя. Я правильно поняла Ваш ответ?
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 06/30/2005 :  10:35:52  Visit Digitall's Homepage
quote:
Originally posted by PL



topic.asp@TOPIC_ID=553.html
Я видела это обсуждение. Спасибо. Решается только макросом, а через шейп лист - нельзя. Я правильно поняла Ваш ответ?
[/quote]
Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.

Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан?
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  11:13:57
[Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.

Готовый макрос даст мне нужный результат, но я все равно не пойму, как это сделано. И что-то немного поменяв в задаче - буду просить у Вас готовый макрос.

Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан?
[/quote]

Если это очень трудоемко, то изобретать не надо. Для меня сейчас работа с шейп листом - ближе, нагляднее и понятнее. А то, что для Вас она примитивна и неудобна - не удивительно. Но все когда-то начинали...
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 06/30/2005 :  11:28:57  Visit Digitall's Homepage
quote:
Originally posted by Digitall

Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.

quote:
Готовый макрос даст мне нужный результат, но я все равно не пойму, как это сделано. И что-то немного поменяв в задаче - буду просить у Вас готовый макрос.



Нет. Т.к. этот макрос я просто сделал для себя, а он пригодился остальным. Возможно, пока придет время смены задачи вы уже разберетесь.

quote:
quote:
Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан?



Если это очень трудоемко, то изобретать не надо. Для меня сейчас работа с шейп листом - ближе, нагляднее и понятнее. А то, что для Вас она примитивна и неудобна - не удивительно. Но все когда-то начинали...



Я не говорил, что работа с ShapeSheet'ом примитивна и неудобна. Я сам в VBA не силен, и пытаюсь тоже свести всё к формулам в ShapeSheet. Но в данном случае вы не сможете реализовать вашу задачу использую только ShapeSheet.

Я сам рисую схему трасс подвесных кабельных линий, и тоже суммирую общую длину всех линий, но используя при этом простой макрос, который я сам и составил.

Для понятности могу привести код макроса с пояснениями.
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  11:43:27

Нет. Т.к. этот макрос я просто сделал для себя, а он пригодился остальным. Возможно, пока придет время смены задачи вы уже разберетесь.

Это вряд ли.


Я не говорил, что работа с ShapeSheet'ом примитивна и неудобна. Я сам в VBA не силен, и пытаюсь тоже свести всё к формулам в ShapeSheet. Но в данном случае вы не сможете реализовать вашу задачу использую только ShapeSheet.

Я сам рисую схему трасс подвесных кабельных линий, и тоже суммирую общую длину всех линий, но используя при этом простой макрос, который я сам и составил.

Для понятности могу привести код макроса с пояснениями.
[/quote]

Теперь ясно. Если не реализуется через шейп лист, поясните пожалуйста код макроса и я его(макрос) на досуге помучаю. Или он меня...
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 06/30/2005 :  13:29:15  Visit Digitall's Homepage
quote:
Originally posted by PL


Нет. Т.к. этот макрос я просто сделал для себя, а он пригодился остальным. Возможно, пока придет время смены задачи вы уже разберетесь.

Это вряд ли.


Я не говорил, что работа с ShapeSheet'ом примитивна и неудобна. Я сам в VBA не силен, и пытаюсь тоже свести всё к формулам в ShapeSheet. Но в данном случае вы не сможете реализовать вашу задачу использую только ShapeSheet.

Я сам рисую схему трасс подвесных кабельных линий, и тоже суммирую общую длину всех линий, но используя при этом простой макрос, который я сам и составил.

Для понятности могу привести код макроса с пояснениями.



Теперь ясно. Если не реализуется через шейп лист, поясните пожалуйста код макроса и я его(макрос) на досуге помучаю. Или он меня...
[/quote]
Я немного изменил макрос, чтобы было как в вашем первом сообщении.
Теперь значение длины берется из ячейки Custom Properties.

Вот полный код с пояснениями:
Sub Summ()
'Начало макроса и его название
Dim Summ, ESumm As Double
'Назначаем переменные Summ - длина, ESumm - Общая сумма
Dim shpObj As Visio.Shape
'Назначаем наш объект как фигуру Visio
Dim selectObj As Visio.Selection
'Назначаем данный объект как выделенные фигуры
Set selectObj = ActiveWindow.Selection
'Устанавливаем текущее выделение фигур активного окна
i = ActiveWindow.Selection.Count
'Приравниваем переменной i количество выделенных фигур
For k = 1 To i
'Начинаем цикл от переменной k до i. Т.е. мы должны взять
'длины от первой выделенной фигуры, до последней.
Set shpObj = ActiveWindow.Selection.Item(k)
'Устанавливаем, что первая, k=1, фигура - это фигура Visio
Summ = shpObj.CellsSRC(visSectionProp, visRowProp + 0, visCustPropsValue)
'Приравниваем переменну Summ к значению ячейки Value,
'первой строки, раздела Custom Properties
'Если ваша строка с длиной не является первой, то
'смените 0 на кол-во строк до этой строки.
ESumm = ESumm + Summ
'Прибавляем текущую длину к общей сумме
Next k
'Завершаем цикл, увеличивая переменную k на единицу
'И далее повторяем цикл снова
ESumm = ESumm * 0.0254
'Переводим дюймы в метры
MsgBox "Суммарное значение = " & ESumm, vbOKOnly, "Visio"
'Показываем пользователю сообщение с общей суммарной длиной

'Конец макроса
End Sub
Go to Top of Page

immortal

Russia
391 Posts

Posted - 06/30/2005 :  13:32:14  Visit immortal's Homepage
допустим у вас коннекторы имеют имена Sheet.1 Sheet.2 Sheet.3
каждый имеет кустом пропертю Prop.Row_1 - это собственно ваша "Протяженность трассы"

формула в отделном шейпе который будет подсчитывать длинну будет выглядеть следующим образом:

=Sheet.1!Prop.Row_1 + Sheet.2!Prop.Row_1 + Sheet.3!Prop.Row_1

т.е. необходимо самостоятельно задавать элементы которые необходимо сосчитать, при удалении элемента с листа, но не удалив ссылку на него из формулы, в ячейке где была формула останется только значение.

проще однако сделать это васиком


визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  13:35:43


Я немного изменил макрос, чтобы было как в вашем первом сообщении.
Теперь значение длины берется из ячейки Custom Properties.

Вот полный код с пояснениями:
Sub Summ()
'Начало макроса и его название
Dim Summ, ESumm As Double
'Назначаем переменные Summ - длина, ESumm - Общая сумма
Dim shpObj As Visio.Shape
'Назначаем наш объект как фигуру Visio
Dim selectObj As Visio.Selection
'Назначаем данный объект как выделенные фигуры
Set selectObj = ActiveWindow.Selection
'Устанавливаем текущее выделение фигур активного окна
i = ActiveWindow.Selection.Count
'Приравниваем переменной i количество выделенных фигур
For k = 1 To i
'Начинаем цикл от переменной k до i. Т.е. мы должны взять
'длины от первой выделенной фигуры, до последней.
Set shpObj = ActiveWindow.Selection.Item(k)
'Устанавливаем, что первая, k=1, фигура - это фигура Visio
Summ = shpObj.CellsSRC(visSectionProp, visRowProp + 0, visCustPropsValue)
'Приравниваем переменну Summ к значению ячейки Value,
'первой строки, раздела Custom Properties
'Если ваша строка с длиной не является первой, то
'смените 0 на кол-во строк до этой строки.
ESumm = ESumm + Summ
'Прибавляем текущую длину к общей сумме
Next k
'Завершаем цикл, увеличивая переменную k на единицу
'И далее повторяем цикл снова
ESumm = ESumm * 0.0254
'Переводим дюймы в метры
MsgBox "Суммарное значение = " & ESumm, vbOKOnly, "Visio"
'Показываем пользователю сообщение с общей суммарной длиной

'Конец макроса
End Sub
[/quote]

Мда, страшно браться. Спа-си-бо!!!
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  13:43:52
quote:
Originally posted by immortal

допустим у вас коннекторы имеют имена Sheet.1 Sheet.2 Sheet.3
каждый имеет кустом пропертю Prop.Row_1 - это собственно ваша "Протяженность трассы"

формула в отделном шейпе который будет подсчитывать длинну будет выглядеть следующим образом:

=Sheet.1!Prop.Row_1 + Sheet.2!Prop.Row_1 + Sheet.3!Prop.Row_1

т.е. необходимо самостоятельно задавать элементы которые необходимо сосчитать, при удалении элемента с листа, но не удалив ссылку на него из формулы, в ячейке где была формула останется только значение.

С этим понятно!

проще однако сделать это васиком

Кому проще?


визио 2003 форэвер

...а вобще-то я белый и пушистый.



Спасибо всем белым и пушистым!!!
Go to Top of Page

immortal

Russia
391 Posts

Posted - 06/30/2005 :  13:54:14  Visit immortal's Homepage
однако замечание, ссылка на ячейку у вас абсолютная CellsSRC(visSectionProp, visRowProp + 0, visCustPropsValue)

т.е. необходимо этот факт учитывать, на мой взгляд лучше обратится непосредственно по имени ячейки
Cells("Prop.Row_1")

т.е. в первом случае ваша пропертя первая, ну если прибавите 1 то будет вторая, получается надо следить, а в моём случае надо лишь позаботиться чтобы имя совпадало.

в начале макроса я бы дописал после того как код будет отлажен:
On Error Resume Next

это исключит останов при ошибке.

кроме того, действия происходят над выделенными объектами

рекомендую перебирать все элементы, пропертю назвать какнибудь оригинально заменить Prop.Row_1 на Prop.dlinna тогда макрос будит
Sub Macro3()
On Error Resume Next
dl = 0
For i = 1 To Application.ActiveWindow.Page.Shapes.Count ' перебирает от первого элемента до последнего
dl = dl + Application.ActiveWindow.Page.Shapes.ItemFromID(i).Cells("Prop.dlinna").FormulaU ' собственно приплюсовывает, если нет такой
'ячейки или в этой ячейке текст то on error resume next пропустит это
Next i

MsgBox dl 'это собственно длинна в переменной dl

End Sub





визио 2003 форэвер

...а вобще-то я белый и пушистый.

Edited by - immortal on 06/30/2005 14:00:31
Go to Top of Page

immortal

Russia
391 Posts

Posted - 06/30/2005 :  13:59:29  Visit immortal's Homepage
если у вас в ячейке элемента длинна вычисляется формулой, то надо использовать не .FormulaU а помоему .Result(0)

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

PL

14 Posts

Posted - 06/30/2005 :  14:16:29
quote:
Originally posted by immortal

если у вас в ячейке элемента длинна вычисляется формулой, то надо использовать не .FormulaU а помоему .Result(0)

визио 2003 форэвер

...а вобще-то я белый и пушистый.



immortal

Всего прочитанного сегодня мне хватит на неделю ковыряний.(Увы - не мастер). Я очень признательна Вам за помощь.
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)