Проблемы с Shape.Top и Shape.Left - PullRequest
0 голосов
/ 17 января 2019

У меня есть некоторый код, который просматривает положение строки, которую пользователь может редактировать. Цель редактирования этой строки - получить грубые измерения из плана графика, который работает до сих пор. Я работаю над тем, чтобы сделать его намного более интерактивным, записывая измеренные позиции.

Вот проблема. Когда эта форма (колено соединителя) находится на корпусе и в точке доступа, она записывает свое положение в точках, используя shape.top и shape.left (код ниже). Когда я изменяю размер этой линии, чтобы поместить точку доступа в другую точку доступа, положение шкафа также меняется, даже если он не двигался. Я заметил, что высота и ширина шкалы изменились на чертеже, но я не могу понять, почему это повлияет на начальную точку.

Стоит отметить, что при повороте углового соединителя вращаются значения ширины и высоты. Это означает, что иногда высота вверх и вниз, а иногда это значение, которое вы ожидаете от ширины. Тем не менее, левая позиция остается постоянной только при повороте разъема на 180 градусов.

Существует ли связь между высотой / шириной шкалы и верхним / левым значением?

Sub Measure()

Set sp = ActiveSheet.Shapes("Measurement")

Msgbox(sp.Top & "//" & sp.Left)

end sub

Редактировать: Итак, я понимаю, что много упоминал о программе, реальная проблема в том, почему изменяются верхние левые измерения, несмотря на то, что верхние левые остаются на экране? И только при повороте на 270/90 (происходит автоматически в зависимости от того, как вы перетаскиваете линию)

Добавить снимки экрана (размеры сверху, затем слева) Это первый снимок экрана с поворотом на 270 Это второй, обратите внимание, что верхний левый остался неподвижным, но точки изменились Эта следующая группа с поворотом на 180/0 (фигура автоматически поворачивается, в противном случае я бы просто заблокировал ее и сделал бы). Повернутый 180 первый снимок экрана Снимок экрана с поворотом на 180 секунд

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я понял, ребята.

Таким образом, при ориентации 0 или 180 Shape.top и Shape.Left дают точные последовательные измерения.

В 90 или 270 верхнюю и левую части необходимо отрегулировать для обеспечения точных последовательных измерений.

Код: Shape.Top - ((Shape.Width-Shape.Height) / 2) и Shape.Left + ((Shape.Width-Shape.Height) / 2)
(ПРИМЕЧАНИЕ: ЭТА РЕГУЛИРОВКА ТОЛЬКО ПРИМЕНЯЕТСЯ, КОГДА ОБЪЕКТ ВРАЩЕН НА 90 или 270 // Shape.Rotation)

Кроме того, форма, используемая здесь, является коленчатым соединителем

0 голосов
/ 17 января 2019

Я сочувствовал вашему распознаванию проблемы и не понял этого явления, но после тестирования кажется, что исходные координаты сохраняются даже при повороте фигуры. Это связано с тем, что даже если вращение выполняется снова, вращение выполняется с использованием исходного значения координаты. Если вы искусственно выровняете положение, координаты появятся соответственно. Я проверил это следующим образом.

Sub Measure()
Dim rngT As Range
Dim sp As Shape
Set sp = ActiveSheet.Shapes("Measurement")

'MsgBox (sp.Top & "//" & sp.Left)
Set rngT = Range("k" & Rows.Count).End(xlUp).Offset(1, 0)
rngT = sp.Top
rngT.Offset(, 1) = sp.Left
End Sub

Sub test()
    Dim sp As Shape
    Dim Ws As Worksheet
    Dim vDB
    Dim i As Integer, t As Single, l As Single
    Dim r As Integer
    vDB = Range("k2", Range("L" & Rows.Count).End(xlUp))

    Set Ws = ActiveSheet
    r = UBound(vDB, 1)
    For i = 1 To r
        t = vDB(i, 1)
        l = vDB(i, 2)
        Set sp = Ws.Shapes.AddShape(msoShapeRectangle, l, t, 10, 10)
    Next i


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...