All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как удалить одновременно все группы?
Author Previous Topic Topic Next Topic  

Lena

11 Posts

Posted - 07/26/2004 :  11:07:20
Добрый всем день, интересует следующий вопрос: на рисунке много сгрупированных шейпов, как программно удалить одновременно все группы,чтобы каждый шейп был отдельно, это мой кусок программы:
......
w = 0
For i = 1 To ActivePage.Shapes.Count
If ActivePage.Shapes(i).Name = "Блок 1." & ActivePage.Shapes(i).ID Or ActivePage.Shapes(i).Name = "Блок 1" Then
w = w + 1
Set ar2(w) = ActivePage.Shapes(i)
ar2(w).Ungroup(i)
end if
next i
он работает следующим образом, удаляет только одну группу за один запуск, т. е. если есть 10 групп, то они удалятся только если прогу запускать 10 раз, при каждом запуске выдает сообщение "this action will sever the object's link to its master"
Подскажите пожалуйста как сделать, чтобы работало правильно!

Digitall

Russia
389 Posts

Posted - 07/26/2004 :  12:24:22  Visit Digitall's Homepage
quote:
Originally posted by Lena

Добрый всем день, интересует следующий вопрос: на рисунке много сгрупированных шейпов, как программно удалить одновременно все группы,чтобы каждый шейп был отдельно, это мой кусок программы:
......
w = 0
For i = 1 To ActivePage.Shapes.Count
If ActivePage.Shapes(i).Name = "Блок 1." & ActivePage.Shapes(i).ID Or ActivePage.Shapes(i).Name = "Блок 1" Then
w = w + 1
Set ar2(w) = ActivePage.Shapes(i)
ar2(w).Ungroup(i)
end if
next i
он работает следующим образом, удаляет только одну группу за один запуск, т. е. если есть 10 групп, то они удалятся только если прогу запускать 10 раз, при каждом запуске выдает сообщение "this action will sever the object's link to its master"
Подскажите пожалуйста как сделать, чтобы работало правильно!


Если я все правильно понял, у Вас есть мастер и его фигуры на листе. Мастер, по-видимому называется Блок 1.
И надо разгруппировать все его фигуры на листе. Если все это так, то можно сделать, как в примере метода Ungroup справки Visio.

Sub Ungroup_Example()

Dim shp1Obj As Visio.Shape
For i = 1 To ActivePage.Shapes.Count
If ActivePage.Shapes(i).Name = "Блок 1." & ActivePage.Shapes(i).ID Or ActivePage.Shapes(i).Name = "Блок 1" Then
Set shp1Obj = ActivePage.Shapes(i)
ActiveWindow.Select shp1Obj, visSelect
End If
Next i
Application.DoCmd (1052)

End Sub

Проверял на Visio 2000, т.к. Вы не указали ее.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/26/2004 :  16:08:33
С циклами тоже можно. Только нужно обернуть этот цикл в еще один внешний и повторять внутренний цикл, пока ActivePage.Shapes.Count перед внутренним циклом не будет совпадать с ним же после внутреннего цикла (последний проход будет холостым, контрольным).
Так можно разгруппировать и вложенные группы.

От предупреждающего сообщения можно отделаться указанием
Application.AlertResponse = 1
а после всего разгруппирования вернуть его в исходнгое положение
Application.AlertResponse = 0
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 07/27/2004 :  08:29:38  Visit Digitall's Homepage
quote:
Originally posted by Tumanov

Так можно разгруппировать и вложенные группы.


Проще записать 2 раза Application.DoCmd (1052), как мне кажется...
Go to Top of Page

Lena

11 Posts

Posted - 07/30/2004 :  08:05:51
quote:
Originally posted by Digitall

quote:
Originally posted by Tumanov

Так можно разгруппировать и вложенные группы.


Проще записать 2 раза Application.DoCmd (1052), как мне кажется...


Спасибо большое за помощь, действительно работает, только можно еще один маленький вопрос , что означает Application.DoCmd (1052), так как у меня при запуске программы в случае если все группы разгрупированы, выдается ошибка на данной строке, а что она означает я не знаю, еще раз большое спасибо
Go to Top of Page

immortal

Russia
391 Posts

Posted - 07/30/2004 :  08:32:47  Visit immortal's Homepage
quote:
Application.DoCmd (1052)

shape - ungroup
quote:
выдается ошибка на данной строке

напишите обработку ошибок в первой строке модуля (макроса):
On Error Resume Next
или
On Error GoTo ....

Edited by - immortal on 07/30/2004 08:48:02
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/30/2004 :  15:47:00
Это не ошибка, а Alert. Я же писал выше, что его нужно отключать
Application.AlertResponse = 1
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)