Author |
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
|
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, т.к. Вы не указали ее. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/26/2004 : 16:08:33
|
С циклами тоже можно. Только нужно обернуть этот цикл в еще один внешний и повторять внутренний цикл, пока ActivePage.Shapes.Count перед внутренним циклом не будет совпадать с ним же после внутреннего цикла (последний проход будет холостым, контрольным). Так можно разгруппировать и вложенные группы.
От предупреждающего сообщения можно отделаться указанием Application.AlertResponse = 1 а после всего разгруппирования вернуть его в исходнгое положение Application.AlertResponse = 0
|
|
|
Digitall
Russia
389 Posts |
Posted - 07/27/2004 : 08:29:38
|
quote: Originally posted by Tumanov
Так можно разгруппировать и вложенные группы.
Проще записать 2 раза Application.DoCmd (1052), как мне кажется... |
|
|
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), так как у меня при запуске программы в случае если все группы разгрупированы, выдается ошибка на данной строке, а что она означает я не знаю, еще раз большое спасибо |
|
|
immortal
Russia
391 Posts |
Posted - 07/30/2004 : 08:32:47
|
quote: Application.DoCmd (1052)
shape - ungroup quote: выдается ошибка на данной строке
напишите обработку ошибок в первой строке модуля (макроса): On Error Resume Next или On Error GoTo ....
|
Edited by - immortal on 07/30/2004 08:48:02 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/30/2004 : 15:47:00
|
Это не ошибка, а Alert. Я же писал выше, что его нужно отключать Application.AlertResponse = 1
|
|
|
|
Topic |
|
|
|