Это было сложно, но я таки понял
Дело в том, что при записи макроса идет запись только проделываемых операций, а не того, что вы подумали при этом. То есть, когда вы рисуете линию, он записывает в макрос создание именно этой линии в конкретных координатах, а не "линию с отступом от края фигуры" Тут надо самому лезть в код и менять координаты на переменные. Ну вы же вроде как сами поняли это судя по сообщению #11?
Наконец у меня получилось хотя бы какую то мысль донести)) Вот я сделал макрос, потом запустил на новом листе и линии остались там же.
Код:
Sub ms1()
' Recorded 29.10.2017
Dim OrigSelection As ShapeRange
Set OrigSelection = ActiveSelectionRange
Dim eff1 As Effect
"здесь рисует контур" - все как нужно
Set eff1 = OrigSelection(1).CreateContour(0, 1.377953, 1, 0, CreateRGBColor(0, 0, 0), CreateRGBColor(0, 0, 0), CreateRGBColor(0, 0, 0), 0, 0, 2, 4, 15#)
eff1.Contour.Offset = 3.543307
eff1.Contour.Offset = 11.811024
eff1.Contour.ContourGroup.AddToSelection
ActiveSelection.Separate
' Recording of this command is not supported: SplitDualSpotObject
"здесь рисую прямоугольник от угла чтобы найти расстояние"
Dim s1 As Shape
Set s1 = ActiveLayer.CreateRectangle(-113.438394, 25.06748, -125.249417, 36.878504)
s1.Rectangle.CornerType = cdrCornerTypeRound
s1.Rectangle.RelativeCornerScaling = True
s1.Fill.ApplyNoFill
s1.Outline.SetPropertiesEx 0.007874, OutlineStyles(0), CreateRGBColor(0, 0, 0), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#, Justification:=cdrOutlineJustificationMiddle
"здесь рисую линию по тем координатам которые нашли раньше"
Dim s2 As Shape
Set s2 = ActiveLayer.CreateLineSegment(-113.438394, 36.878504, -113.438394, -4.899291)
s2.Fill.ApplyNoFill
s2.Outline.SetPropertiesEx 0.007874, OutlineStyles(0), CreateRGBColor(0, 0, 0), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#, Justification:=cdrOutlineJustificationMiddle
Dim dup1 As ShapeRange
Set dup1 = ActiveDocument.CreateShapeRangeFromArray(s1, s2).Duplicate
dup1.Move 56.411228, 0#
dup1.OrderToFront
"переношу линию на другую сторону и удаляю прямоугольник"
dup1.Flip 1
dup1(1).Delete
s1.Delete
End Sub
Грубо говоря просто нужно заменить координаты
Set s2 = ActiveLayer.CreateLineSegment(-113.438394, 36.878504, -113.438394, -4.899291)
На
Dim x,y As Integer
Set s2 = ActiveLayer.CreateLineSegment(ActiveSelection x, ну и так далее)
Просто я так пробовал корел выдает ошибку