网站首页 > 技术文章 正文
当我们使用的EXCEL有大量数据时,选中某一数据却无法快速定位它所属的字段信息,这时可以使用聚光灯效果来快速判断,在EXCEL中使用聚光灯需要使用条件格式来制作,这里我使用VBA来教大家制作一个聚光灯的效果,并且如果你的数据原来就有颜色标记的,聚光灯也并不会破坏它。
在开始之前,首先学习一个异或运算,异或是两个数的位运算,按位相同结果为0,不同结果为1,异或运算有一个特性,a异或b再异或b,结果还为a本身,使用异或的这个特征,可以用来恢复单元格的原颜色。
c=a xor b
d=c xor b
//此时d=a
打开VBA编辑界面,在thisworkbook对象下定义如下全局变量,用来保存当前聚光灯的行列信息,在下次改变聚光灯时方便取消之前的效果。
Public row As Long, col As Long, shn As Worksheet
Public color_row, color_col, color_pre
点击wirkbook的SelectionChange事件,自动填充Workbook_SheetSelectionChange过程。
'初始化聚光灯颜色
length = 50'填充列的长度
color_row = VBA.RGB(2177, 194, 231)
color_col = VBA.RGB(171, 243, 165)
color_row = color_row Xor vbWhite
color_col = color_col Xor vbWhite
聚光灯的行列颜色可以分别指定,这里首先将颜色与白色进行异或运算作为初始颜色,在聚光灯填充颜色时,再与单元格的原颜色进行异或,如果原色为白色,那么填充的便是最初填写的rgb颜色。
Sub setColor(ByVal rg As Range, ByVal c As Long)
cur = rg.Interior.Color Xor c
If cur = vbWhite Then
rg.Interior.Pattern = xlNone
Else
rg.Interior.Color = cur
End If
End Sub
设置颜色的函数,当颜色为白色时,使用pattern属性设置为xlnone,防止颜色覆盖初始的虚线网格。
'取消原聚光灯效果
If row > 0 Then
cur = shn.Cells(row, col).Interior.Color
If cur <> color_pre Then '还原当前手动设置的颜色
cur = cur Xor color_row
cur = cur Xor color_col
shn.Cells(row, col).Interior.Color = cur
End If
'取消列颜色
For i = 1 To row + lenth
Call setColor(shn.Cells(i, col), color_row)
Next
'取消行颜色
For i = 1 To 50
Call setColor(shn.Cells(row, i), color_col)
Next
End If
在聚光灯生效后保存聚光灯所在单元格的颜色,取消时如果颜色被改变,则先将此单元格颜色分别与聚光灯颜色异或,在之后的循环取消时又会恢复为手动设置颜色。
Set shn = Sh
'如果选中的是区域,则不设置聚光灯
If Target.CountLarge > 1 Then
row = 0
col = 0
Exit Sub
End If
如果选中的单元格不是一格,则结束过程,即不需要聚光灯。
'获取当前选中的行号、列号,并保存
row = Target.row
col = Target.Column
'设置列颜色
For i = 1 To row + length
Call setColor(shn.Cells(i, col), color_row)
Next
'设置行颜色
For i = 1 To 50
Call setColor(shn.Cells(row, i), color_col)
Next
'保存当前选中单元格的颜色
color_pre = shn.Cells(row, col).Interior.Color
循环设置行列的颜色信息,最后将选中的单元格颜色保存,以便下次判断其是否被手动更改过。
来看看效果怎么样:
当改变I9单元格的颜色并点击其他单元格时:
以上便是使用VBA为EXCEL定制聚光灯的方法,亲爱的朋友们,你们还有什么好的方法,欢迎在评论区留言讨论。
需要源码的朋友请私信。
猜你喜欢
- 2024-10-08 使用VBA自动化处理Excel数据生成装箱单
- 2024-10-08 补课了!VBA过程的附加技能(vba 过程调用)
- 2024-10-08 VBA三种程序类型介绍(vba程序是什么意思)
- 2024-10-08 Excel VBA 提取word表格信息(vba提取sheet名字)
- 2024-10-08 rust跟Excel vba交互(rust制作表)
- 2024-10-08 VBA|使用窗体控件02:使用显示信息的标签控件
- 2024-10-08 Excel破解:如何快速破解VBA窗口密码
- 2024-10-08 VB/VBA中的函数,用了那么久,其实是这样的
- 2024-10-08 VBA|正确使用过程和自定义函数(vba自定义函数参数说明)
- 2024-10-08 VBA高级应用30例:Ribbon(功能区)的介绍
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)