RipVanWinkel, Тоже самое. Для негоризонтальной линии:
[vba]Код
Type point_
X As Single
Y As Single
End Type
Sub ddd()
Dim line1 As Shape
Dim figure1 As Shape, figure2 As Shape
Dim pline(2) As point_, lineW As Single
Dim k As Single
Dim VF As Boolean, HF As Boolean
Set line1 = ActiveSheet.Shapes(Cells(3, 13))
Set figure1 = ActiveSheet.Shapes(Cells(3, 11))
line1.Select
figure1.Select
VF = line1.DrawingObject.ShapeRange.VerticalFlip ' свойство меняется при изменении положения отрезка в пространстве
HF = line1.DrawingObject.ShapeRange.HorizontalFlip ' свойство меняется при изменении положения отрезка в пространстве
If VF = HF Then
pline(1).X = line1.Left
pline(1).Y = line1.Top
pline(2).X = line1.Left + line1.Width
pline(2).Y = line1.Top + line1.Height
Else
pline(1).X = line1.Left
pline(1).Y = line1.Top + line1.Height
pline(2).X = line1.Left + line1.Width
pline(2).Y = line1.Top
End If
lineW = Sqr((pline(1).Y - pline(2).Y) ^ 2 + (pline(1).X - pline(2).X) ^ 2)
n& = 5
For i = 1 To n
figure1.Copy
ActiveSheet.Paste
Set figure2 = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
k = (i - 1) / (n - 1)
figure2.Top = pline(1).Y + k * (pline(2).Y - pline(1).Y)
figure2.Left = pline(1).X + k * (pline(2).X - pline(1).X) - figure2.Width / 2
Next i
End Sub
[/vba]