Здравствуйте форумчани. В вопросах макросов несилен, но имеется потребность в его создании. Имеется картинка. Эта картинка по условию становится то прозрачной (полностью), то нет. Условие: если ячейка А1 (например) не имеет цвета, то она прозрачная. Если ячейка А1 имеет цвет (например, красный), то наша картинка становится не прозрачной. Буду благодарен за помощь. Спасибо.
Здравствуйте форумчани. В вопросах макросов несилен, но имеется потребность в его создании. Имеется картинка. Эта картинка по условию становится то прозрачной (полностью), то нет. Условие: если ячейка А1 (например) не имеет цвета, то она прозрачная. Если ячейка А1 имеет цвет (например, красный), то наша картинка становится не прозрачной. Буду благодарен за помощь. Спасибо.vsemdobra
Установка цвета ячейки или, говоря в общем, ее форматирование не вызывает никакой событийной процедуры рабочего листа, внутри которой можно было бы управлять прозрачностью рисунка. Для запуска подобной процедуры требуется более "весомое" действие: изменение значения ячейки, либо двойной щелчок по ней, либо выбор другой ячейки, либо помещение на рабочий лист специальной кнопки, либо еще что-нибудь с явно выраженным событием, которое можно обработать. Наконец, можно просто периодически по необходимости запускать отдельную процедуру вручную.
Вам следует пересмотреть постановку задачи и "привязаться" к какому-то более явному событию из перечисленных выше, нежели просто изменение цвета заливки ячейки.
Установка цвета ячейки или, говоря в общем, ее форматирование не вызывает никакой событийной процедуры рабочего листа, внутри которой можно было бы управлять прозрачностью рисунка. Для запуска подобной процедуры требуется более "весомое" действие: изменение значения ячейки, либо двойной щелчок по ней, либо выбор другой ячейки, либо помещение на рабочий лист специальной кнопки, либо еще что-нибудь с явно выраженным событием, которое можно обработать. Наконец, можно просто периодически по необходимости запускать отдельную процедуру вручную.
Вам следует пересмотреть постановку задачи и "привязаться" к какому-то более явному событию из перечисленных выше, нежели просто изменение цвета заливки ячейки.Gustav
Спасибо, что ответили и дали развернутый ответ. А если условием для ячейки А1 в описанном выше случае будет значение «00:00:00». Дело в том, что в ячейки А1 у меня секундомер с обратным отсчётом на 10 секунд. Когда секундомер достигает значения «00:00:00», то ячейка закрашивается в красный цвет. Это краткое объяснение. А если вместо красного цвета привязать условие к значению «00:00:00», т.е. достижение этого значения картинка становится не прозрачной, а если выше этого значения, то картинка всегда прозрачная. Так возможно?
Спасибо, что ответили и дали развернутый ответ. А если условием для ячейки А1 в описанном выше случае будет значение «00:00:00». Дело в том, что в ячейки А1 у меня секундомер с обратным отсчётом на 10 секунд. Когда секундомер достигает значения «00:00:00», то ячейка закрашивается в красный цвет. Это краткое объяснение. А если вместо красного цвета привязать условие к значению «00:00:00», т.е. достижение этого значения картинка становится не прозрачной, а если выше этого значения, то картинка всегда прозрачная. Так возможно?vsemdobra
в ячейки А1 у меня секундомер с обратным отсчётом на 10 секунд
Что представляет собой этот секундомер? Это же, наверное, процедура, написанная на VB? Вот вам и место, которое можно подправить и дописать в него код по управлению прозрачностью рисунка. А как запускается этот секундомер?
Кстати, по поводу прозрачности рисунка. Что-то я не нашёл свойство "прозрачность" (Transparency?) среди свойств внедренного на лист рисунка. Такое свойство есть у таких подъобъектов рисунка как "Тень" и "Отражение", но у самого рисунка такое свойство, увы, не наблюдается. Вы сами вручную через пользовательский интерфейс Excel умеете как-то изменить прозрачность рисунка? Если да, то как именно? Возможно, здесь есть путаница понятий и имеется в виду не "прозрачность", а, например, "видимость" (Visible).
Вообще, конечно, давно пора показать это ваше "секундомерное хозяйство" здесь в виде файла-примера. А то разговор какой-то не очень предметный получается... И потом, если срастется решение, на каком материале мне или кому-то другому Вам всё это показывать? Мы же не будем сами этот тестовый "полигон" городить с нуля, тем более, что в ваших словах пока "не всё так однозначно".
в ячейки А1 у меня секундомер с обратным отсчётом на 10 секунд
Что представляет собой этот секундомер? Это же, наверное, процедура, написанная на VB? Вот вам и место, которое можно подправить и дописать в него код по управлению прозрачностью рисунка. А как запускается этот секундомер?
Кстати, по поводу прозрачности рисунка. Что-то я не нашёл свойство "прозрачность" (Transparency?) среди свойств внедренного на лист рисунка. Такое свойство есть у таких подъобъектов рисунка как "Тень" и "Отражение", но у самого рисунка такое свойство, увы, не наблюдается. Вы сами вручную через пользовательский интерфейс Excel умеете как-то изменить прозрачность рисунка? Если да, то как именно? Возможно, здесь есть путаница понятий и имеется в виду не "прозрачность", а, например, "видимость" (Visible).
Вообще, конечно, давно пора показать это ваше "секундомерное хозяйство" здесь в виде файла-примера. А то разговор какой-то не очень предметный получается... И потом, если срастется решение, на каком материале мне или кому-то другому Вам всё это показывать? Мы же не будем сами этот тестовый "полигон" городить с нуля, тем более, что в ваших словах пока "не всё так однозначно".Gustav
Обратите внимание на файл, что я приложил. Нажав на кнопку "крутить спички" включается счетчик отсчета секундомера. При нажатии на кнопку добавляется 10 секунд, и отсчитывается вниз пока на достигнет значения 00:00:00. Цель такая, чтобы пока значение секундомера БОЛЬШЕ ЧЕМ 00:00:00, то синий прямоугольник должен быть прозрачным. Как только значение достигает 00:00:00, то прямоугольник становится непрозрачным. Теперь по поводу вашего вопроса о прозрачности. Прикладываю скриншот, где указывается прозрачность для фигуры прямоугольник. Такое свойство для фигуры в моей версии экзеля имеется. На скриншоте выделил красным цветом. Это игра, для развития кратковременной памяти ребёнка. Ребёнок нажимает на "крутить спички", в течении 10 секунд должен запомнить расположение спичек, а после истечения 10 секунд прямоугольник становится непрозрачным и закрывает с собой все спички. И ребёнок по памяти должен воспроизвести расположение спичек ручкой на бумаге. Вот как то так.
Обратите внимание на файл, что я приложил. Нажав на кнопку "крутить спички" включается счетчик отсчета секундомера. При нажатии на кнопку добавляется 10 секунд, и отсчитывается вниз пока на достигнет значения 00:00:00. Цель такая, чтобы пока значение секундомера БОЛЬШЕ ЧЕМ 00:00:00, то синий прямоугольник должен быть прозрачным. Как только значение достигает 00:00:00, то прямоугольник становится непрозрачным. Теперь по поводу вашего вопроса о прозрачности. Прикладываю скриншот, где указывается прозрачность для фигуры прямоугольник. Такое свойство для фигуры в моей версии экзеля имеется. На скриншоте выделил красным цветом. Это игра, для развития кратковременной памяти ребёнка. Ребёнок нажимает на "крутить спички", в течении 10 секунд должен запомнить расположение спичек, а после истечения 10 секунд прямоугольник становится непрозрачным и закрывает с собой все спички. И ребёнок по памяти должен воспроизвести расположение спичек ручкой на бумаге. Вот как то так.vsemdobra
Ну, вроде, что-то получилось и, вроде, даже похоже на правду (см. прилагаемый файл). Я совместил "синий" (когда он непрозрачный) прямоугольник с полем для спичек и придал коду модулей 26 и 27 следующий вид:
Код модуля Module27: [vba]
Код
Sub закрыть_спички() set_transparency 0 End Sub
Sub открыть_спички() set_transparency 1 End Sub
Sub set_transparency(transp) Worksheets("Спички").Shapes("Прямоугольник 2").Fill.Transparency = transp End Sub
[/vba]
Код модуля Module26: [vba]
Код
Public interval As Date Sub timer_spichki() interval = Now + TimeValue("00:00:01")
If Range("W10").Value < TimeValue("00:00:01") / 2 Then закрыть_спички Exit Sub End If
Application.OnTime interval, "timer_spichki" End Sub
[/vba]
Остальные подробности см. в модуле листа "Спички" в процедурах нажатия кнопок 1 и 2. В них добавлен вызов процедуры "открыть_спички". А вот вызов "закрыть_спички" перебрался в процедуру продления таймера "timer_spichki" в Module26.
Ну, вроде, что-то получилось и, вроде, даже похоже на правду (см. прилагаемый файл). Я совместил "синий" (когда он непрозрачный) прямоугольник с полем для спичек и придал коду модулей 26 и 27 следующий вид:
Код модуля Module27: [vba]
Код
Sub закрыть_спички() set_transparency 0 End Sub
Sub открыть_спички() set_transparency 1 End Sub
Sub set_transparency(transp) Worksheets("Спички").Shapes("Прямоугольник 2").Fill.Transparency = transp End Sub
[/vba]
Код модуля Module26: [vba]
Код
Public interval As Date Sub timer_spichki() interval = Now + TimeValue("00:00:01")
If Range("W10").Value < TimeValue("00:00:01") / 2 Then закрыть_спички Exit Sub End If
Application.OnTime interval, "timer_spichki" End Sub
[/vba]
Остальные подробности см. в модуле листа "Спички" в процедурах нажатия кнопок 1 и 2. В них добавлен вызов процедуры "открыть_спички". А вот вызов "закрыть_спички" перебрался в процедуру продления таймера "timer_spichki" в Module26.Gustav