Страницы: 1
RSS
универсальный код, меняющий вызывающий объект
 
Добрый день, всем хорошего настроения.
Можно ли сделать универсальную функцию VBA, которая будет окрашивать объект при наведении мыши на него мыши, а при отводе ее будет возвращать первоначальный (ну или заданный) цвет. Я могу код в конкретный объект листа прописать (например, кнопку) но слишком уж их много.
Спасибо.
 
Там смотрите [и адаптируйте]:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=5136 ((с) ZVI)
 
Благодарю.
Посмотрел, немного не то. Я не знаю, как мне получить имя объекта, на который я тыкнул мышкой, не знаю, как к нему обратиться. Допустим, это кнопка aciveX
 
Так вам надо выполнять действия по щелчку на объекте,
или в момент проведения мыша над ним (перекраска)?

Первое - несложно (хотя, смотря какие объекты)
Если назначить всем объектам один и тот же макрос - то делается примерно так:
http://programmersforum.ru/showthread.php?t=88002
Еще пример:
http://excelvba.ru/code/ZoomImages

Если вам надо отслеживать перемещение мыша - всё НАМНОГО сложнее
причина: придется по таймеру (десятки раз в секунду) получать координаты курсора,
искать среди объектов тот, который под мышом находится (их может быть несколько, в общем случае),
потом быстро перекрашивать, - в результате:
1) всё будет сильно тормозить, т.к. проц постоянно нагружен, даже когда мыша не шевелите
2) код очень сложный, универсальным сделать вряд ли получится
3) не всегда успеете корректно все перекрасить, если перемещать курсор быстро (он перескочит с одной фигуры на другую так быстро, что макрос не успеет отловить перемещение над пустым пространством - в итоге, 2 или больше фигур будут окрашены)


Советы:
1) не пытаться это реализовать на макросах)
2) если так надо - всё элементарно делается на веб-странице, ну или хотя бы на форме VBA (хотя там проблема номер 3 тоже имеет место быть)
Изменено: Игорь - 18.08.2014 13:04:54
 
Цитата
Игорь пишет: е - несложно (хотя, смотря какие объекты)
Если назначить всем объектам один и тот же макрос - то делается примерно т
Игорь, мне нужно в момент события mousedown окрасить объект, на котором произошел mousedown, а в момент mouseup убрать окрас  :)
 
А, ну тогда надо использовать классы
Прикрепите пример файла - посмотрим, что у вас там за элементы ActiveX

PS: я в качестве кнопок использую только автофигуры, - там нет событий типа mousedown
так что не для всех объектов получится сделать
Если же у вас все на ActiveX - можно попробовать
 
вот тут любопытный разбор (но на формах)
F1 творит чудеса
 
Цитата
Игорь пишет: я в качестве кнопок использую только автофигуры, - там нет событий типа mousedown
так что не для всех объектов получится сделать
Почему, если не секрет? Мне автофигуры не нравятся, т.к. выглядят по кондовому, нужно их большими делать, чтобы надписи нормально влезли. Зато нет проблем с искажением шрифтов. Еще что плохо в автофигурах, когда нужно разрешить менять ячейки, но запретить таскать кнопки - это сделать не получится, т.к. у них единое разрешение в защите.
Изменено: Oleg - 18.08.2014 23:26:58
 
Цитата
Почему, если не секрет? Мне автофигуры не нравятся
неоднократно сталкивался с ситуацией, когда макросы, назначенные кнопкам ActiveX, слетали
(т.е. мне высылают файл Excel с макросами и кнопками CommandButton, которым назначены эти макросы, - а у меня на компе оказывалось, что надо заново назначать кнопкам макросы)
Причину этого глюка я так и не понял (проблема проявлялась нечасто, в 1 файле из 20)

Автофигуры можно как угодно оформить (придать им любой вид, в т.ч. имитировать стандартную кнопку)
Чтобы надписи нормально влазили - ставим нулевые отступы текста от краев фигуры
И назначенные автофигурам макросы никогда не слетают, - это основная причина, почему я пользуюсь кнпками только из автофигур

Цитата
когда нужно разрешить менять ячейки, но запретить таскать кнопки - это сделать не получится
выделяем все ячейки (или их часть), в свойствах снимаем галочку «защищаемая ячейка»,
ставим защиту на лист, - теперь кнопки на автофигурах не сдвинуть, а ячейки по-прежнему редактируются.
 
Цитата
Игорь пишет:
выделяем все ячейки (или их часть), в свойствах снимаем галочку «защищаемая ячейка»,
ставим защиту на лист, - теперь кнопки на автофигурах не сдвинуть, а ячейки по-прежнему редактируются.
Да, действительно. Но есть еще один небольшой минус (довольно неочевидный). Когда снимаешь галочку защита объекта (не могу снять защиту со всех ячеек листа, нужно их защищать), по какой-то причине ячейки с проверкой данных нельзя таскать + (который в правом нижнем углу ячейки). А так да, может тоже перейду на автофигуры. Можно ли менять их фон?
Изменено: Oleg - 19.08.2014 13:13:26
Страницы: 1
Читают тему
Наверх