Изменение формы «Линия» Начало / Конец после создания - PullRequest
0 голосов
/ 05 июня 2018

все!

Я создаю линию с

Private Const Origin_X = 248.4
Private Const Origin_Y = 248.4

Private Const Width_X = 205.2
Private Const Height_Y = 205.2

[ ... ]

    Dim sh As Shape

    X1 = Origin_X
    Y1 = Origin_Y

    X2 = Origin_X + Width_X
    Y2 = Origin_Y + Height_Y

    Set sh = ActiveSheet.Shapes.AddLine(X1, Y1, X2, Y2)
    sh.Line.EndArrowheadStyle = msoArrowheadTriangle

Эта линия указывает от своего начала на некоторую нижнюю правую точку.

Теперь я хочу, чтобы она указалав какой-то верхней левой точке.Но я не могу понять, что делать.Очевидно, что свойства .Width и .Height не допускают отрицательных значений.Я прочитал кое-что о .Node и .Points, но не могу заставить их сотрудничать.

Строки

X1 = Origin_X
Y1 = Origin_Y

X2 = Origin_X - Width_X
Y2 = Origin_Y - Height_Y

Set nd = sh.Nodes(1)

nd.Points(1, 2) = Y1
nd.Points(1, 2) = Y1

nd.Points(2, 1) = X2
nd.Points(2, 2) = Y2

выдают сообщение об ошибке "index out of range" при попыткеназначить nd.Список sh.Nodes кажется пустым, sh.Nodes.Count равен 0.

Спасибо за любую помощь.

Майкл

edit: Это не было очевидно,но: просто перевернуть или повернуть не поможет.Мне нужен метод для динамического изменения линии, указывающей из фиксированного начала в любое место, в любом направлении / длине.У меня может быть x2 / y2 или как альтернатива, у меня может быть / r (альфа и радиус) или что-то еще.

Прямо сейчас я создаю новую линию и затем удаляю старую.Но это вызывает мерцание и, возможно, проблемы с памятью.

1 Ответ

0 голосов
/ 05 июня 2018
Линия

имеет начало и конец, поэтому их замена будет

Set sh = ActiveSheet.Shapes.AddLine(X2, Y2, X1, Y1)
sh.Line.EndArrowheadStyle = msoArrowheadTriangle
...