Ось ще одна ідея, натхненна відповіддю Леонардо Альвеса Мачадо . Створіть ці підпрограми VBA ("макроси"):
Sub Flash()
'
' Flash Macro
'
Call toggle
Application.OnTime Now + TimeValue("00:00:01"), "toggle"
'
End Sub
Sub toggle()
'
For Each cell In Selection
tmp = cell.Interior.Color
' Things can be explicitly colored white ((255,255,255) = (FF,FF,FF) = &HFFFFFF),
' but white things are often actually uncolored. Check whether this cell actually
' has no color and no pattern, and, if so, set a fake just-barely-off-white color
' that serves as a flag.
If tmp = &HFFFFFF And cell.Interior.ColorIndex = xlNone _
And cell.Interior.Pattern = xlNone Then
tmp = &HFFFFFE ' &HFFFFFF = pure white; &HFFFFFE = (pure white) - 1
End If
Red = tmp Mod 256
tmp = tmp \ 256
Grn = tmp Mod 256
tmp = tmp \ 256
Blu = tmp Mod 256
' Change to a different color (through a reversable process).
Red = (Red + 128) Mod 256
Grn = (Grn + 128) Mod 256
Blu = (Blu + 128) Mod 256
tmp = RGB(Red, Grn, Blu)
' If we're being called for the second time, the above reconstructs the original
' color. If the reconstructed color is &HFFFFFE, that (probably) means that
' the cell was originally uncolored, in which case we restore it to that state.
' Otherwise, just restore the color.
If tmp = &HFFFFFE Then
cell.Interior.Pattern = xlNone
Else
cell.Interior.Color = tmp
End If
Next
End Sub
Тепер, коли ви запускаєте Flash
рутину, вона зателефонує toggle
, що змінює колір заливки (внутрішній) усіх комірок у виділенні на щось кардинально інше. (Якщо ви можете вдосконалити цей алгоритм переливання кольорів, будь ласка, повідомте нам, що ви придумали.) Потім він планує toggle
викликати знову на секунду; це відновить початкові кольори і створить ефект миготливого.
Якщо ви хочете спалахнути не один раз, просто змініть макрос виклику на щось подібне
Call toggle
Application.OnTime Now + TimeValue("00:00:01"), "toggle"
Application.OnTime Now + TimeValue("00:00:02"), "toggle"
Application.OnTime Now + TimeValue("00:00:03"), "toggle"
Application.OnTime Now + TimeValue("00:00:04"), "toggle"
Application.OnTime Now + TimeValue("00:00:05"), "toggle"
Змінення toggle
для роботи над усім поточним стовпцем та / або рядком є простим і залишається як вправа.
Код дещо складніший, ніж повинен бути. Я намагався пояснити, чому в коментарях, але я вийшов з обґрунтування, тобто коли в комірці Excel вказано "заливку", навіть якщо вона суцільно біла,
межі зникають. Ви можете переконатися в цьому, встановивши клітинку B2
для заливки суцільного білого:
Перш ніж я додавав особливий випадок, коли я запускав Flash
код по незабарвленій комірці (формат за замовчуванням), перший дзвінок toggle
змінив його на суцільний сірий (127,127,127), а другий дзвінок змінив його "назад" на суцільний білий - що, звичайно , не було тим, що було раніше, і що призвело до зникнення прикордонних ліній.
Якщо перемістити курсор до завершення послідовності миготіння,
toggle
зміниться колір (и) початкового вибору, а потім нового (модифікованого) виділення. Таким чином, ці зміни не скасують один одного (як слід), і таким чином у вас з'явиться купа комірок зі зміненими кольорами. Тож не робіть цього.