MICROSOFT

EP02. “Highlight Active Cell 高亮活动单元格”

首页 Microsoft 工具 Excel · VBA · Events · EP02
约 5 分钟· #EP02#Excel#Events
🔒 登录后可标记已读
  • 用 Worksheet 的 SelectionChange 事件,实现「每次切换选取的单元格,自动把该单元格所在的行和列高亮」的效果
  • 类似很多阅读模式表格常见的十字高亮
  • 前置知识:EP01 的事件绑定方法
  • 学完能理解怎么用双层 For 循环配合 Interior.ColorIndex 做单元格底色处理

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


绑定 SelectionChange 事件

  1. 打开 VBE,双击 Sheet1
  2. 左边下拉选 Worksheet,右边下拉选 SelectionChange

[截图:VBE 代码窗口上方左右两个下拉选单,左边选 Worksheet、右边选 SelectionChange]


完整代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer

    Cells.Interior.ColorIndex = 0

    rowNumberValue = ActiveCell.Row
    columnNumberValue = ActiveCell.Column

    For i = 1 To rowNumberValue
        Cells(i, columnNumberValue).Interior.ColorIndex = 37
    Next i

    For j = 1 To columnNumberValue
        Cells(rowNumberValue, j).Interior.ColorIndex = 37
    Next j
End Sub
  • Cells.Interior.ColorIndex = 0:先清掉整张表原本的底色,避免上一次高亮的痕迹留着
  • rowNumberValue / columnNumberValue:记录目前选中的单元格是第几行第几列
  • 第一个 For 循环:把从第 1 行到目前行号、同一列的所有单元格底色改成 ColorIndex 37(淡蓝色),画出「列」的高亮
  • 第二个 For 循环:同样逻辑画出「行」的高亮
  • ColorIndex 37 是淡蓝色,可以换成任何合法的 ColorIndex 数字

实操示例

在 Sheet1 任意点选不同单元格,观察选中位置对应的整行整列是否自动被淡蓝色底色标出。

[截图:点选某个单元格后,该单元格所在的整行整列都被淡蓝色底色标出的十字高亮效果]


学完你会

  • ✅ 用 SelectionChange 事件实现「跟着选取自动更新」的效果
  • ✅ 用 ActiveCell.Row/.Column 拿到当前选中位置的坐标
  • ✅ 用 Interior.ColorIndex 批量设置一整行/一整列的底色,并知道要先清空旧状态

常见错误

  • 忘记先 Cells.Interior.ColorIndex = 0 清空底色,导致每次切换单元格,旧的高亮痕迹越叠越多
  • ColorIndex 用错数字,误以为跟 RGB 色码一样直接填,实际上 ColorIndex 是 Excel 内建的固定色盘编号(1-56)
  • 这个事件在大表格上频繁触发两层循环,如果表格很大(几千行),切换单元格时会感觉到明显卡顿

Sources

Blog / Website:

  1. Highlight Active Cell