Excel 亲自动手制作宏插件实现聚光灯功能 一键开启关闭聚光灯效果
将自己做的Excel宏和Excel函数做成加载项插入到Excel功能区。
效果展示
聚光灯功能(俗称高亮行列,或者高亮当前行列)能够在我们选择单元格时,突出显示所在行和列,极大地提高数据处理和分析时的视觉效果与操作便利性。
WPS 的表格自带高亮行列功能,Excel 功能强大,却没有自带聚光灯功能,让人遗憾。为了弥补这个遗憾,特此利用宏插件在 Excel 中实现聚光灯效果,让高亮行列不再是 Excel 的短板。本文将详细介绍如何使用 Excel 的加载项实现 Excel 的聚光灯效果。
一、宏插件创建基础步骤-创建、激活、添加 Excel 加载项
(一)新建工作表
首先,打开 Excel 软件并新建一个工作表。在开发者工具中,打开 VB编辑器,在本工作薄的 VBAProject 插入新模块。如 图1 所示。
(二)编写聚光灯代码(缺少一个关键函数,后文有附录代码)
在上述创建模块后,双击模块,在空白处,写入聚光灯函数。2.1 代码块 是聚光灯函数参考。
(2.1)ToggleSpotlight 和 UpdateSpotlight 代码块
注:此处缺少 AddOrUpdateSelectionChangeEvent 函数。后文会附录上该函数的全部代码,只需要将后文的代码块粘贴到本段代码最后的空白处,继续以下操作即可。
Dim isSpotlightOn As Boolean ' 用于记录聚光灯效果是否开启的布尔变量
Dim eventAddedDict As Object ' 用于记录每个工作表是否已添加 Worksheet_SelectionChange 事件
Dim prevRngDict As Object ' 用于记录每个工作表的上一次选中的单元格区域
' 确保在每次使用前初始化字典
Function GetEventAddedDict() As Object
If eventAddedDict Is Nothing Then
Set eventAddedDict = CreateObject("Scripting.Dictionary")
End If
Set GetEventAddedDict = eventAddedDict
End Function
Function GetPrevRngDict() As Object
If prevRngDict Is Nothing Then
Set prevRngDict = CreateObject("Scripting.Dictionary")
End If
Set GetPrevRngDict = prevRngDict
End Function
' 获取当前工作表的唯一键(工作簿名称 + 工作表名称)
Function GetUniqueKey(ws As Worksheet) As String
GetUniqueKey = ws.Parent.Name & "!" & ws.Name
End Function
Sub ToggleSpotlight()
Dim ws As Worksheet
Set ws = ActiveSheet
' 确保字典已初始化
Dim dict As Object
Set dict = GetEventAddedDict()
Set prevDict = GetPrevRngDict()
' 获取当前工作表的唯一键
Dim uniqueKey As String
uniqueKey = GetUniqueKey(ws)
' 如果字典中没有当前工作表的记录,则初始化为 False
If Not dict.Exists(uniqueKey) Then
dict(uniqueKey) = False
End If
' 如果是当前工作表首次启用聚光灯,则添加 Worksheet_SelectionChange 事件
If Not isSpotlightOn And Not dict(uniqueKey) Then
Call AddOrUpdateSelectionChangeEvent(ws)
dict(uniqueKey) = True
End If
' 切换聚光灯状态
If isSpotlightOn Then
isSpotlightOn = False
Cells.Interior.ColorIndex = xlColorIndexNone ' 清除所有单元格已设置的填充颜色(可选,根据需求决定是否保留此行)
Else
isSpotlightOn = True
' 首次启用时,立即更新聚光灯
Call UpdateSpotlight
End If
End Sub
Sub UpdateSpotlight()
If isSpotlightOn Then
Dim ws As Worksheet
Set ws