У меня есть макрос записанный рекодером, меняющий цвет автофигуры с красного на зеленый. Но это изменение происходит мгновенно.
Как заставить макрос - менять цвет автофигуры плавно ? То есть плавно менять цвет автофигуры с красного цвета - на зеленый цвет, например за 3 секунды.
Всем доброго дня. Помогите решить вопрос.
У меня есть макрос записанный рекодером, меняющий цвет автофигуры с красного на зеленый. Но это изменение происходит мгновенно.
Как заставить макрос - менять цвет автофигуры плавно ? То есть плавно менять цвет автофигуры с красного цвета - на зеленый цвет, например за 3 секунды.Grell
Использовать формулу прямой в пространсве при известных X, Y, Z которые надо заменить на R ,G, B. Построить её от начального цвета к конечному, и постепенно , за указанное время, продвигаясь по ней менять значения цвета , количество дискретов и пауза между ними - определит скорость и плавность.
Sub chColor(Obj1, R1, G1, B1, Optional Steps = 20) Const dt# = 0.02 With Obj1
decRGB = .Fill.ForeColor.RGB
B = Int(decRGB / 65536)
decRGB = decRGB - B * 65536
G = Int(decRGB / 256)
R = decRGB - G * 256 If R = R1 And G = G1 And B = B1 ThenExitSub
RStep = (R - R1) / Steps
Gstep = (G - G1) / Steps
Bstep = (B - B1) / Steps For i = 1To Steps
R = R - RStep
G = G - Gstep
B = B - Bstep With .Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(R, G, B)
.Transparency = 0
.Solid EndWith
t = Timer + dt WhileTimer < t: Wend DoEvents: Next DoEvents EndWith EndSub
Использовать формулу прямой в пространсве при известных X, Y, Z которые надо заменить на R ,G, B. Построить её от начального цвета к конечному, и постепенно , за указанное время, продвигаясь по ней менять значения цвета , количество дискретов и пауза между ними - определит скорость и плавность.
Sub chColor(Obj1, R1, G1, B1, Optional Steps = 20) Const dt# = 0.02 With Obj1
decRGB = .Fill.ForeColor.RGB
B = Int(decRGB / 65536)
decRGB = decRGB - B * 65536
G = Int(decRGB / 256)
R = decRGB - G * 256 If R = R1 And G = G1 And B = B1 ThenExitSub
RStep = (R - R1) / Steps
Gstep = (G - G1) / Steps
Bstep = (B - B1) / Steps For i = 1To Steps
R = R - RStep
G = G - Gstep
B = B - Bstep With .Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(R, G, B)
.Transparency = 0
.Solid EndWith
t = Timer + dt WhileTimer < t: Wend DoEvents: Next DoEvents EndWith EndSub
bmv98rus Да! Спасибище, похоже, общий принцип усмотрел.
Поэкспериментировал с файлом. Интересная особенность: если начинаю вводить в ячейку до достижения конечного цвета, смена цвета прекращается и замирает на том цвете, который был в момент начала ввода. В коде такого прерывания не увидел - вроде до конца должна программа дорабатывать.
Плохо смотрел? Или это тонкость DoEvents?
bmv98rus Да! Спасибище, похоже, общий принцип усмотрел.
Поэкспериментировал с файлом. Интересная особенность: если начинаю вводить в ячейку до достижения конечного цвета, смена цвета прекращается и замирает на том цвете, который был в момент начала ввода. В коде такого прерывания не увидел - вроде до конца должна программа дорабатывать.
Плохо смотрел? Или это тонкость DoEvents?Perfect2You
В приложенном новом файле реализация немного изменена. Последний параметр теперь - время в секундах, за которое должен измениться цвет. Таймер используется не для ожидания, а только для фиксации времени начала, конца и текущего момента. Грубо говоря, помогает определить: до какого места прямой мы уже добрались.
bmv98rus! И все заинтересованные!
Программа из предыдущего приложенного файла около полуночи может зациклиться! В полночь таймер обнуляется.
Выход: вместо
t = Timer + dt WhileTimer < t: Wend
поставить
t = Date * 86400 + Timer + dt WhileDate * 86400 + Timer < t: Wend
В приложенном новом файле реализация немного изменена. Последний параметр теперь - время в секундах, за которое должен измениться цвет. Таймер используется не для ожидания, а только для фиксации времени начала, конца и текущего момента. Грубо говоря, помогает определить: до какого места прямой мы уже добрались.Perfect2You