На листе есть маленькие кружки под названием "Приемный узел". Макросом на эти приемные узлы добавляются - группы фигур по образцу (образцы размещены на правой стороне листа). Каждый образец имеет свое название и соотношение "приемных узлов" и групп-образцов указано в таблице AI10:AJ22 Однако в этой таблице на один приемный узел - может приходится несколько групп-образцов, а срабатывает добавление только одного образца, а не нескольких.
Как вы считаете - что поправить в макросе, чтобы он мог добавить несколько различных объектов - на один и тот же "приемный узел", указанный в таблице AI10:AJ22 ? (Сейчас он может добавить только одну группу - на один приемный узел.)
Option Explicit
PublicDeclare PtrSafe Sub Sleep Lib"kernel32" (ByVal dwMilliseconds As LongPtr)
Dim ss As Shapes Dim s As Shape Dim s2 As Shape Dim sh As Shape Dim sh2 As Shape Dim redPoint As Shape Dim r As Range, r2 As Range Dim sourse AsString Dim destX AsSingle, destY AsSingle Dim targetX AsSingle, targetY AsSingle Dim sr As Shapes Dim ids AsVariant
PublicSub CloneAndMode2()
Application.ScreenUpdating = False OnErrorResumeNext Set r = [AI10:AI16]: Set r2 = [AJ10:AJ16] Set ss = ActiveSheet.Shapes ReDim ids(1To1) For Each s In ss If s.Type = msoGroup Then For Each s2 In s.GroupItems If s2.Name Like"Приемный узел*"Then Call Ungroup2(s) Call moveshape2(s2) Call Group2 EndIf Next Else If s.Name Like"Приемный узел*"Then Call moveshape2(s) EndIf EndIf Next
Range("A1").Select
Application.ScreenUpdating = True EndSub
PrivateSub Ungroup2(ByRef sh As Shape) Dim sh3 As Shape Dim n AsLong
n = 1 For Each sh3 In sh.GroupItems ReDim Preserve ids(1To n)
ids(n) = sh3.ID
n = n + 1 Next
sh.Ungroup EndSub
PrivateSub Group2() Dim i AsLong Dim ssh As Shape For i = 1ToUBound(ids) For Each ssh In ActiveSheet.Shapes If ssh.ID = ids(i) Then If i = 1Then
ssh.Select Else
ssh.Select Replace:=False EndIf EndIf Next Next
ActiveWindow.Selection.ShapeRange.Group Erase ids EndSub
Доброго времени форумчане.
На листе есть маленькие кружки под названием "Приемный узел". Макросом на эти приемные узлы добавляются - группы фигур по образцу (образцы размещены на правой стороне листа). Каждый образец имеет свое название и соотношение "приемных узлов" и групп-образцов указано в таблице AI10:AJ22 Однако в этой таблице на один приемный узел - может приходится несколько групп-образцов, а срабатывает добавление только одного образца, а не нескольких.
Как вы считаете - что поправить в макросе, чтобы он мог добавить несколько различных объектов - на один и тот же "приемный узел", указанный в таблице AI10:AJ22 ? (Сейчас он может добавить только одну группу - на один приемный узел.)
Option Explicit
PublicDeclare PtrSafe Sub Sleep Lib"kernel32" (ByVal dwMilliseconds As LongPtr)
Dim ss As Shapes Dim s As Shape Dim s2 As Shape Dim sh As Shape Dim sh2 As Shape Dim redPoint As Shape Dim r As Range, r2 As Range Dim sourse AsString Dim destX AsSingle, destY AsSingle Dim targetX AsSingle, targetY AsSingle Dim sr As Shapes Dim ids AsVariant
PublicSub CloneAndMode2()
Application.ScreenUpdating = False OnErrorResumeNext Set r = [AI10:AI16]: Set r2 = [AJ10:AJ16] Set ss = ActiveSheet.Shapes ReDim ids(1To1) For Each s In ss If s.Type = msoGroup Then For Each s2 In s.GroupItems If s2.Name Like"Приемный узел*"Then Call Ungroup2(s) Call moveshape2(s2) Call Group2 EndIf Next Else If s.Name Like"Приемный узел*"Then Call moveshape2(s) EndIf EndIf Next
Range("A1").Select
Application.ScreenUpdating = True EndSub
PrivateSub Ungroup2(ByRef sh As Shape) Dim sh3 As Shape Dim n AsLong
n = 1 For Each sh3 In sh.GroupItems ReDim Preserve ids(1To n)
ids(n) = sh3.ID
n = n + 1 Next
sh.Ungroup EndSub
PrivateSub Group2() Dim i AsLong Dim ssh As Shape For i = 1ToUBound(ids) For Each ssh In ActiveSheet.Shapes If ssh.ID = ids(i) Then If i = 1Then
ssh.Select Else
ssh.Select Replace:=False EndIf EndIf Next Next
ActiveWindow.Selection.ShapeRange.Group Erase ids EndSub