На листе - имеется четыре кнопки в виде синих стрелок (прямо,влево,вправо,назад) - и одна маленькая красная стрелка.
Кнопка "прямо" ПЕРЕМЕЩАЕТ красную стрелку - прямо на одну ячейку, кнопка "влево" - ПОВОРАЧИВАЕТ ее влево, кнопка "вправо" - ПОВОРАЧИВАЕТ ее вправо, а кнопка "назад"- ПЕРЕМЕЩАЕТ красную стрелку на одну ячейку назад. Как заставить кнопки - так влиять на красную стрелку ?
Добрый вечер. Имеется вопрос.
На листе - имеется четыре кнопки в виде синих стрелок (прямо,влево,вправо,назад) - и одна маленькая красная стрелка.
Кнопка "прямо" ПЕРЕМЕЩАЕТ красную стрелку - прямо на одну ячейку, кнопка "влево" - ПОВОРАЧИВАЕТ ее влево, кнопка "вправо" - ПОВОРАЧИВАЕТ ее вправо, а кнопка "назад"- ПЕРЕМЕЩАЕТ красную стрелку на одну ячейку назад. Как заставить кнопки - так влиять на красную стрелку ?Werwolfik
Sub MoveShape() On Error Resume Next Dim sh As Shape: Set sh = ActiveSheet.Shapes("Down Arrow 5") Select Case Right(CStr(Application.Caller), 1) Case "1" sh.Rotation = sh.Rotation + 90 Case "2" sh.Rotation = sh.Rotation - 90 Case "3" sh.Top = sh.TopLeftCell.Offset(1).Top Case "4" sh.Top = sh.TopLeftCell.Offset(-1).Top Case Else Exit Sub End Select End Sub
[/vba]
Werwolfik, добрый вечер. Так хотели? [vba]
Код
Sub MoveShape() On Error Resume Next Dim sh As Shape: Set sh = ActiveSheet.Shapes("Down Arrow 5") Select Case Right(CStr(Application.Caller), 1) Case "1" sh.Rotation = sh.Rotation + 90 Case "2" sh.Rotation = sh.Rotation - 90 Case "3" sh.Top = sh.TopLeftCell.Offset(1).Top Case "4" sh.Top = sh.TopLeftCell.Offset(-1).Top Case Else Exit Sub End Select End Sub
Mikael, это немного не то. У вас макрос для кнопок Влево и Вправо - работает как нужно. А вот кнопки Вперед и Назад - не двигают стрелку вперед и назад. Они ее просто перемещают вверх или вниз - по листу.
А по идее стрелка должна двигаться Вперед- то есть в том направлении куда она в настоящий момент повернута. И Назад - то есть пятясь назад (не меняя направления) от того направления куда она в настоящий момент повернута.
Mikael, это немного не то. У вас макрос для кнопок Влево и Вправо - работает как нужно. А вот кнопки Вперед и Назад - не двигают стрелку вперед и назад. Они ее просто перемещают вверх или вниз - по листу.
А по идее стрелка должна двигаться Вперед- то есть в том направлении куда она в настоящий момент повернута. И Назад - то есть пятясь назад (не меняя направления) от того направления куда она в настоящий момент повернута.Werwolfik
Werwolfik, здравствуйте. А в чем сложность переделать код под себя. Осталась геометрия.Угол наклона получить можно sh.Rotation. Приращение координат есть, рассчитывайте новую точку.
Werwolfik, здравствуйте. А в чем сложность переделать код под себя. Осталась геометрия.Угол наклона получить можно sh.Rotation. Приращение координат есть, рассчитывайте новую точку.doober
doober, Куда именно в макросе добавлять sh.Rotation, чтобы получить нужное направление для движения стрелки Вперед ? То есть сейчас код движения по кнопке "Вперед" - выглядит так: [vba]
Код
sh.Top = sh.TopLeftCell.Offset(1).Top
[/vba] Но это движение вверх, а не вперед. Я понимаю, что вам это кажется чистой геометрией - как и мне, а вот как это технически в коде ВБА реализовать ?
doober, Куда именно в макросе добавлять sh.Rotation, чтобы получить нужное направление для движения стрелки Вперед ? То есть сейчас код движения по кнопке "Вперед" - выглядит так: [vba]
Код
sh.Top = sh.TopLeftCell.Offset(1).Top
[/vba] Но это движение вверх, а не вперед. Я понимаю, что вам это кажется чистой геометрией - как и мне, а вот как это технически в коде ВБА реализовать ?Werwolfik
Sub MoveShape() On Error Resume Next Dim sh As Shape: Set sh = ActiveSheet.Shapes("Down Arrow 5") Dim angle As Double, X As Double, Y As Double, angleGR As Double angle = sh.Rotation angleGR = 0 If angle <> 0 Then angleGR = WorksheetFunction.Pi * angle / 180 Y = sh.TopLeftCell.Top X = sh.TopLeftCell.Left Dlinna = IIf(sh.DrawingObject.Width > sh.DrawingObject.Height, sh.DrawingObject.Width, sh.DrawingObject.Height)
Select Case Right(CStr(Application.Caller), 1) Case "1" 'Расчет Case "2" 'Расчет Case "3" 'Расчет Case "4" 'Расчет
Case Else Exit Sub End Select End Sub
[/vba]
Все в Ваших руках. Все данные есть[vba]
Код
Sub MoveShape() On Error Resume Next Dim sh As Shape: Set sh = ActiveSheet.Shapes("Down Arrow 5") Dim angle As Double, X As Double, Y As Double, angleGR As Double angle = sh.Rotation angleGR = 0 If angle <> 0 Then angleGR = WorksheetFunction.Pi * angle / 180 Y = sh.TopLeftCell.Top X = sh.TopLeftCell.Left Dlinna = IIf(sh.DrawingObject.Width > sh.DrawingObject.Height, sh.DrawingObject.Width, sh.DrawingObject.Height)
Select Case Right(CStr(Application.Caller), 1) Case "1" 'Расчет Case "2" 'Расчет Case "3" 'Расчет Case "4" 'Расчет
Далее геометрия. Есть длинна отрезка, есть координаты точки, угол наклона В зависимости от направления( Case "1", Case "2", Case "3", Case "4") считайте координату точки и угол поворота отрезка
Далее геометрия. Есть длинна отрезка, есть координаты точки, угол наклона В зависимости от направления( Case "1", Case "2", Case "3", Case "4") считайте координату точки и угол поворота отрезкаdoober
Приращения рассчитывайте в зависимости от нажатых кнопкок sh.Top = Y ± Приращение1 sh.Left=X± Приращение2 sh.Rotation = angle ± Приращение3 Если это не понятно. читайте учебник геометрии.
Приращения рассчитывайте в зависимости от нажатых кнопкок sh.Top = Y ± Приращение1 sh.Left=X± Приращение2 sh.Rotation = angle ± Приращение3 Если это не понятно. читайте учебник геометрии.doober
doober, что такое "приращение" ? У меня имеются только угол наклона, длина, координаты.
И я не совсем понимаю как здесь в принципе используются координаты. Двигаться-то нужно строго НА ОДНУ ЯЧЕЙКУ, а ячейка может быть любой длины и ширины и отличаться от соседней ячейки.
Вы какие координаты имеете ввиду ? Координаты чего - стрелки, ячейки ?
doober, что такое "приращение" ? У меня имеются только угол наклона, длина, координаты.
И я не совсем понимаю как здесь в принципе используются координаты. Двигаться-то нужно строго НА ОДНУ ЯЧЕЙКУ, а ячейка может быть любой длины и ширины и отличаться от соседней ячейки.
Вы какие координаты имеете ввиду ? Координаты чего - стрелки, ячейки ?Werwolfik
Сообщение отредактировал Werwolfik - Суббота, 07.04.2018, 02:33