Процедура, представленная ниже, иллюстрирует применение события SelectionChange. Она вызывается при каждом создании пользователем нового выделения на активном листе.
Эта процедура активируется каждый раз, когда пользователь создает новое выделение на листе. Она осуществляет сброс цвета фона для всех ячеек и выделяет строку и столбец активной ячейки светло-зелёным цветом, что улучшает визуальное выделение. Если фоновый цвет уже присутствует на листе, процедура оставляет его без изменений, за исключением листов с условным форматированием или выбранным стилем таблицы, где фоновый цвет сохраняется. Важно отметить, что выполнение этого макроса приводит к ОЧИСТКЕ СТЕКА (см. в конце статьи) отмены операций, поэтому следует учесть это при использовании функции отмены операций Excel.
Давайте рассмотрим этот код построчно:
- Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range): Это объявление подпрограммы (процедуры). Оно указывает, что следующий блок кода является обработчиком события SelectionChange для данного листа Excel. Это событие срабатывает, когда пользователь изменяет выделение ячеек на листе.
- Cells.Interior.ColorIndex = xlNone: Эта строка кода устанавливает цвет фона для всех ячеек на листе в "xlNone", что означает отсутствие цвета. Практически это прозрачный фон.
- With ActiveCell: Эта строка кода начинает блок оператора With, который позволяет использовать объект ActiveCell без повторного его указания в каждой строке кода внутри блока. Весь блок With завершается строкой End With.
- .EntireRow.Interior.Color = RGB(144, 238, 144): Эта строка кода устанавливает цвет фона для всей строки активной ячейки в светло-зеленый цвет, используя функцию RGB, которая принимает значения красного, зеленого и синего цветов в диапазоне от 0 до 255.
- .EntireColumn.Interior.Color = RGB(144, 238, 144): Аналогично предыдущей строке, эта строка кода устанавливает цвет фона для всего столбца.
- End With закрываем оператор With.
- End Sub заканчиваем процедуру.
Очистка стека
Когда в приложении, таком как Microsoft Excel, выполняются операции (например, изменение данных, форматирование ячеек и т. д.), пользователь обычно имеет возможность отменить последнее действие с помощью функции "Отменить" (обычно сочетание клавиш Ctrl+Z). Отмена операции происходит благодаря использованию стека отмены операций.
Стек отмены операций (или стек отката) представляет собой механизм, который сохраняет состояния системы после каждой выполненной операции. Если пользователь решит отменить последнюю операцию, система просто возвращает состояние, сохраненное в вершине стека.
В предыдущем контексте "приводит к очистке стека отмены операций" означает, что выполнение макроса Worksheet_SelectionChange приводит к удалению сохраненных состояний в стеке отмены операций. Таким образом, если пользователь случайно активирует макрос и затем решит отменить какое-либо предыдущее действие, оно не будет доступно, так как стек был очищен в результате выполнения макроса.