Вот еще одна идея, вдохновленная ответом Леонардо Алвеса Мачадо.
Создайте эти подпрограммы 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
изменит цвет (ы) исходного выделения, а затем нового (измененного) выделения.
Таким образом, эти изменения не отменят друг друга (как они должны), и поэтому у вас будет группа ячеек с измененными цветами.
Так что не делай этого.