Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запрет пересечения линии - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет пересечения линии (Макросы/Sub)
Запрет пересечения линии
RagnarLodbrokovitch Дата: Среда, 20.03.2019, 06:54 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте друзья.
У меня на листе кружок, который перемещается при помощи нажатий на стрелки.
Двигается он при помощи простенького макроса, написанного макрорекодером.

Как запретить этому кружку пересекать линию ?
Чтобы он мог обойти ее, но не пересекать.
В этом случае при нажатии на кнопку перемещения - он просто будет стоять на месте.
К сообщению приложен файл: 7965979.xls (69.0 Kb)
 
Ответить
СообщениеЗдравствуйте друзья.
У меня на листе кружок, который перемещается при помощи нажатий на стрелки.
Двигается он при помощи простенького макроса, написанного макрорекодером.

Как запретить этому кружку пересекать линию ?
Чтобы он мог обойти ее, но не пересекать.
В этом случае при нажатии на кнопку перемещения - он просто будет стоять на месте.

Автор - RagnarLodbrokovitch
Дата добавления - 20.03.2019 в 06:54
RagnarLodbrokovitch Дата: Воскресенье, 24.03.2019, 05:18 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Не появилось ли у кого - каких-нибудь идей на этот счет ?
 
Ответить
СообщениеНе появилось ли у кого - каких-нибудь идей на этот счет ?

Автор - RagnarLodbrokovitch
Дата добавления - 24.03.2019 в 05:18
bmv98rus Дата: Воскресенье, 24.03.2019, 10:58 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
RagnarLodbrokovitch, Провеить на пересечение отрезка с окружностью, если есть, то не двигаем. Уравнение окружности, уравнение прясой. Область определения для отрезка на прямой - вот и вся идея.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеRagnarLodbrokovitch, Провеить на пересечение отрезка с окружностью, если есть, то не двигаем. Уравнение окружности, уравнение прясой. Область определения для отрезка на прямой - вот и вся идея.

Автор - bmv98rus
Дата добавления - 24.03.2019 в 10:58
RagnarLodbrokovitch Дата: Воскресенье, 24.03.2019, 11:02 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Провеить на пересечение отрезка с окружностью, если есть, то не двигаем.

А куда именно не двигаем ?

Фигуре не запрещено вообще двигаться - ей только запрещено пересекать линию.
Как макрос распознает - с какой стороны проходит линия в момент приближения к ней ?


Сообщение отредактировал RagnarLodbrokovitch - Воскресенье, 24.03.2019, 11:08
 
Ответить
Сообщение
Провеить на пересечение отрезка с окружностью, если есть, то не двигаем.

А куда именно не двигаем ?

Фигуре не запрещено вообще двигаться - ей только запрещено пересекать линию.
Как макрос распознает - с какой стороны проходит линия в момент приближения к ней ?

Автор - RagnarLodbrokovitch
Дата добавления - 24.03.2019 в 11:02
bmv98rus Дата: Воскресенье, 24.03.2019, 11:52 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата RagnarLodbrokovitch, 24.03.2019 в 11:02, в сообщении № 4 ()
А куда именно не двигаем ?
куда угодно не двигаем :-)
Ну у вас это не кружок конечно. и перемещение рывком, но тут тоже не сильно сложно. Сперва упростим. Двигаем не фигуру а точку. Тогда отрезок не должен пересекаться с отрезком на который хотим переместить. Если пересекается, то стоим на месте.
Так как у вас. фигура, то проверить надо два раза и отрезок перемещения увеличивается на размер фигур.

Погрешность Будет, но это лучше чем ничего.
К сообщению приложен файл: 4114595.jpg (9.5 Kb)


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Цитата RagnarLodbrokovitch, 24.03.2019 в 11:02, в сообщении № 4 ()
А куда именно не двигаем ?
куда угодно не двигаем :-)
Ну у вас это не кружок конечно. и перемещение рывком, но тут тоже не сильно сложно. Сперва упростим. Двигаем не фигуру а точку. Тогда отрезок не должен пересекаться с отрезком на который хотим переместить. Если пересекается, то стоим на месте.
Так как у вас. фигура, то проверить надо два раза и отрезок перемещения увеличивается на размер фигур.

Погрешность Будет, но это лучше чем ничего.

Автор - bmv98rus
Дата добавления - 24.03.2019 в 11:52
RagnarLodbrokovitch Дата: Воскресенье, 24.03.2019, 12:11 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Если пересекается, то стоим на месте.

То есть вы имеете ввиду, что фигура намертво замрет на одном месте ?
У меня в файле - несколько кнопок, которые отвечают за перемещение.

При приближении вплотную, или просто при сильном приближении фигуры (или точки) к линии - какие-то из этих кнопок должны "отключится", а какие-то должны продолжать работать.
Если линия - проходит снизу - то это значит что должна отключится кнопка движения вниз, а все остальные кнопки продолжить работу.

Так вот как макрос определит - какие из нескольких кнопок отключить, а какие не трогать ?
 
Ответить
Сообщение
Если пересекается, то стоим на месте.

То есть вы имеете ввиду, что фигура намертво замрет на одном месте ?
У меня в файле - несколько кнопок, которые отвечают за перемещение.

При приближении вплотную, или просто при сильном приближении фигуры (или точки) к линии - какие-то из этих кнопок должны "отключится", а какие-то должны продолжать работать.
Если линия - проходит снизу - то это значит что должна отключится кнопка движения вниз, а все остальные кнопки продолжить работу.

Так вот как макрос определит - какие из нескольких кнопок отключить, а какие не трогать ?

Автор - RagnarLodbrokovitch
Дата добавления - 24.03.2019 в 12:11
bmv98rus Дата: Вторник, 26.03.2019, 16:56 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Сейчас по центральной линии , вам надо сдвинуть как #5 и проверять две крайние линии
Удалил файл.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 26.03.2019, 21:07
 
Ответить
СообщениеСейчас по центральной линии , вам надо сдвинуть как #5 и проверять две крайние линии
Удалил файл.

Автор - bmv98rus
Дата добавления - 26.03.2019 в 16:56
RagnarLodbrokovitch Дата: Вторник, 26.03.2019, 17:21 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, вот смотрите - когда линия под наклоном - то круг беспрепятственно сквозь нее проходит.
К сообщению приложен файл: Copy_of_760-2.xlsm (22.4 Kb)
 
Ответить
Сообщениеbmv98rus, вот смотрите - когда линия под наклоном - то круг беспрепятственно сквозь нее проходит.

Автор - RagnarLodbrokovitch
Дата добавления - 26.03.2019 в 17:21
bmv98rus Дата: Вторник, 26.03.2019, 18:10 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Не в наклоне дела, в направлении движения= ошибся но сейчас посмотреть не могу.
В наклоне, там переворот надо учесть было.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 26.03.2019, 21:08
 
Ответить
СообщениеНе в наклоне дела, в направлении движения= ошибся но сейчас посмотреть не могу.
В наклоне, там переворот надо учесть было.

Автор - bmv98rus
Дата добавления - 26.03.2019 в 18:10
bmv98rus Дата: Вторник, 26.03.2019, 21:07 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Подправил
К сообщению приложен файл: 5842616.xlsm (22.3 Kb)


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеПодправил

Автор - bmv98rus
Дата добавления - 26.03.2019 в 21:07
RagnarLodbrokovitch Дата: Среда, 27.03.2019, 05:15 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, теперь все работает,
Большое спасибо за ответ.

Остался только один непонятный вопрос - как в вашем макросе определяется - какую линию можно пересекать, а какую нельзя ?
В макросе нигде не указывается - название линии или какой-то другой определитель объекта.

Вот я расположил несколько линий на листе, но кружок не пересекает лишь только самую первую.
К сообщению приложен файл: 5842616-2.xlsm (23.4 Kb)
 
Ответить
Сообщениеbmv98rus, теперь все работает,
Большое спасибо за ответ.

Остался только один непонятный вопрос - как в вашем макросе определяется - какую линию можно пересекать, а какую нельзя ?
В макросе нигде не указывается - название линии или какой-то другой определитель объекта.

Вот я расположил несколько линий на листе, но кружок не пересекает лишь только самую первую.

Автор - RagnarLodbrokovitch
Дата добавления - 27.03.2019 в 05:15
bmv98rus Дата: Среда, 27.03.2019, 07:32 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
[vba]
Код
    If CheckCrossing(ActiveSheet.Shapes(9), H, V, ActiveSheet.Shapes(10)) Then Exit Sub
[/vba]ActiveSheet.Shapes(9)- что двигаем
ActiveSheet.Shapes(10) - с чем проверяем
можете менять на
ActiveSheet.Shapes("протагонист")
ActiveSheet.Shapes("Прямая соединительная линия 11")
соответственно


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[vba]
Код
    If CheckCrossing(ActiveSheet.Shapes(9), H, V, ActiveSheet.Shapes(10)) Then Exit Sub
[/vba]ActiveSheet.Shapes(9)- что двигаем
ActiveSheet.Shapes(10) - с чем проверяем
можете менять на
ActiveSheet.Shapes("протагонист")
ActiveSheet.Shapes("Прямая соединительная линия 11")
соответственно

Автор - bmv98rus
Дата добавления - 27.03.2019 в 07:32
RagnarLodbrokovitch Дата: Среда, 27.03.2019, 09:04 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, понятно.
Но что делать если линий много ?

Вот можно например такой код - заставить реагировать на присутствие в фигуре - одного слова "Прямая" ?
[vba]
Код

    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 11")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 12")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 13")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 14")) Then Exit Sub
[/vba]

(Чтобы не вписывать всякий раз - в код новые линии)


Сообщение отредактировал RagnarLodbrokovitch - Среда, 27.03.2019, 09:12
 
Ответить
Сообщениеbmv98rus, понятно.
Но что делать если линий много ?

Вот можно например такой код - заставить реагировать на присутствие в фигуре - одного слова "Прямая" ?
[vba]
Код

    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 11")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 12")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 13")) Then Exit Sub
    If CheckCrossing(ActiveSheet.Shapes("протагонист"), H, V, ActiveSheet.Shapes("Прямая соединительная линия 14")) Then Exit Sub
[/vba]

(Чтобы не вписывать всякий раз - в код новые линии)

Автор - RagnarLodbrokovitch
Дата добавления - 27.03.2019 в 09:04
bmv98rus Дата: Среда, 27.03.2019, 13:07 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Чтоб не вписывать лучше иначе
К сообщению приложен файл: Copy_of_760.xlsm (28.4 Kb)


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеЧтоб не вписывать лучше иначе

Автор - bmv98rus
Дата добавления - 27.03.2019 в 13:07
RagnarLodbrokovitch Дата: Среда, 27.03.2019, 13:18 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, но сейчас в макросе действует - запрет на пересечение вообще любых линий.

Я спрашивал - можно ли макрос заставить реагировать на присутствие в фигуре линии - одного слова "Прямая" ?
 
Ответить
Сообщениеbmv98rus, но сейчас в макросе действует - запрет на пересечение вообще любых линий.

Я спрашивал - можно ли макрос заставить реагировать на присутствие в фигуре линии - одного слова "Прямая" ?

Автор - RagnarLodbrokovitch
Дата добавления - 27.03.2019 в 13:18
bmv98rus Дата: Среда, 27.03.2019, 14:30 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Смотрите примечание, ставьте условие дополнительное по имени и наслаждайтесь.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеСмотрите примечание, ставьте условие дополнительное по имени и наслаждайтесь.

Автор - bmv98rus
Дата добавления - 27.03.2019 в 14:30
RagnarLodbrokovitch Дата: Четверг, 28.03.2019, 02:53 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, ладно, ясно.
Спасибо за ответы.
 
Ответить
Сообщениеbmv98rus, ладно, ясно.
Спасибо за ответы.

Автор - RagnarLodbrokovitch
Дата добавления - 28.03.2019 в 02:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет пересечения линии (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!