| Author | 
                
                  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
                        
                      
                      
  | 
                     
                    
                       quote: Originally posted by PL
  Я рисую схемутрассы.Колодцы соединяю коннекторами произвольной длины, но одинакового вида. Каждый коннектор имеет в Custom Properties строку "Протяженность трассы", где стоит подлинная длина отрезка кабеля (Number; 0,00).Как я могу просуммировать все ячейки Value, всех коннекторов. Желательно без программирования (я его не осилю). Можно ли создать произвольную фигуру и в ее Шейп листе сделать что-то ???, что бы высвечивался итог суммирования. Дамы и Господа, если можно ТО КУДА И ЧТО ПИСАТЬ? 
 
 
   topic.asp@TOPIC_ID=553.html | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 PL 
                 
                
                14 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  10:31:28
                      
  | 
                     
                    
                       [/quote] topic.asp@TOPIC_ID=553.html  Я видела это обсуждение. Спасибо. Решается только макросом, а через шейп лист - нельзя. Я правильно поняла Ваш ответ? | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 Digitall 
                 
                
                Russia 
                389 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  10:35:52
                        
                      
                      
  | 
                     
                    
                       quote: Originally posted by PL
 
 
   topic.asp@TOPIC_ID=553.html  Я видела это обсуждение. Спасибо. Решается только макросом, а через шейп лист - нельзя. Я правильно поняла Ваш ответ? [/quote] Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.
  Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан? | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 PL 
                 
                
                14 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  11:13:57
                      
  | 
                     
                    
                       [Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.
  Готовый макрос даст мне нужный результат, но я все равно не пойму, как это сделано. И что-то немного поменяв в задаче - буду просить у Вас готовый макрос.
  Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан? [/quote]
  Если это очень трудоемко, то изобретать не надо. Для меня сейчас работа с шейп листом - ближе, нагляднее и понятнее. А то, что для Вас она примитивна и неудобна - не удивительно. Но все когда-то начинали... | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 Digitall 
                 
                
                Russia 
                389 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  11:28:57
                        
                      
                      
  | 
                     
                    
                       quote: Originally posted by Digitall
  Да, но решается ГОТОВЫМ макросом. Если что-то непонятно, могу написать по шагам, что надо сделать, чтобы все заработало.
 
 quote: Готовый макрос даст мне нужный результат, но я все равно не пойму, как это сделано. И что-то немного поменяв в задаче - буду просить у Вас готовый макрос.
  
  
  Нет. Т.к. этот макрос я просто сделал для себя, а он пригодился остальным. Возможно, пока придет время смены задачи вы уже разберетесь.  
 
 quote:
 quote: Хотя и через ShapeSheet тоже можно, но так гораздо удобнее. Зачем изобретать велосипед, который уже сделан?
  
 
  Если это очень трудоемко, то изобретать не надо. Для меня сейчас работа с шейп листом - ближе, нагляднее и понятнее. А то, что для Вас она примитивна и неудобна - не удивительно. Но все когда-то начинали...
 
  
  Я не говорил, что работа с ShapeSheet'ом примитивна и неудобна. Я сам в VBA не силен, и пытаюсь тоже свести всё к формулам в ShapeSheet. Но в данном случае вы не сможете реализовать вашу задачу использую только ShapeSheet.
  Я сам рисую схему трасс подвесных кабельных линий, и тоже суммирую общую длину всех линий, но используя при этом простой макрос, который я сам и составил.
  Для понятности могу привести код макроса с пояснениями.   | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 PL 
                 
                
                14 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  11:43:27
                      
  | 
                     
                    
                        Нет. Т.к. этот макрос я просто сделал для себя, а он пригодился остальным. Возможно, пока придет время смены задачи вы уже разберетесь.  
  Это вряд ли.  
 
  Я не говорил, что работа с ShapeSheet'ом примитивна и неудобна. Я сам в VBA не силен, и пытаюсь тоже свести всё к формулам в ShapeSheet. Но в данном случае вы не сможете реализовать вашу задачу использую только ShapeSheet.
  Я сам рисую схему трасс подвесных кабельных линий, и тоже суммирую общую длину всех линий, но используя при этом простой макрос, который я сам и составил.
  Для понятности могу привести код макроса с пояснениями.   [/quote]
  Теперь ясно. Если не реализуется через шейп лист, поясните пожалуйста код макроса и я его(макрос) на досуге помучаю. Или он меня...  | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 Digitall 
                 
                
                Russia 
                389 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  13:29:15
                        
                      
                      
  | 
                     
                    
                       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 | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 immortal 
                 
                
                Russia 
                391 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  13:32:14
                        
                      
                      
  | 
                     
                    
                       допустим у вас коннекторы имеют имена 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 форэвер
  ...а вобще-то я белый и пушистый. | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 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]
  Мда, страшно браться. Спа-си-бо!!! | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 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 форэвер
  ...а вобще-то я белый и пушистый.
 
  
  Спасибо всем белым и пушистым!!! | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 immortal 
                 
                
                Russia 
                391 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  13:54:14
                        
                      
                      
  | 
                     
                    
                       однако замечание, ссылка на ячейку у вас абсолютная 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 | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 immortal 
                 
                
                Russia 
                391 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  13:59:29
                        
                      
                      
  | 
                     
                    
                       если у вас в ячейке элемента длинна вычисляется формулой, то надо использовать не .FormulaU а помоему .Result(0)
  визио 2003 форэвер
  ...а вобще-то я белый и пушистый. | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                | 
                 PL 
                 
                
                14 Posts  | 
                
                  
                    
                      
                       Posted - 06/30/2005 :  14:16:29
                      
  | 
                     
                    
                       quote: Originally posted by immortal
  если у вас в ячейке элемента длинна вычисляется формулой, то надо использовать не .FormulaU а помоему .Result(0)
  визио 2003 форэвер
  ...а вобще-то я белый и пушистый.
 
  
  immortal
  Всего прочитанного сегодня мне хватит на неделю ковыряний.(Увы - не мастер). Я очень признательна Вам за помощь. | 
                     
                    
                        | 
                     
                   
                 | 
               
              
                |   | 
                
                  Topic   | 
                  | 
               
             
           | 
         
       
     |