今天说一下Workbook_SheetSelectionChange事件,这是一个工作薄事件,可以对所有工作表生效。
只要选择的单元格位置变了,就会触发它里面写的代码。
于是我们就可以利用工作薄事件动态标记相同的数据,像下图这样:
1 代码
这个代码放在工作薄模块下即可使用,但只对sheet1生效,代码里写有注释,可左右移动查看。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> Sheet1.Name Then Exit Sub '如果当前工作表不是sheet1,退出程序
For Each ce In Target
n = n + 1
If n > 1 Then Exit Sub '如果选择区域大于1个单元格 则退出程序
Next ce
Dim rng As Range
Set rng = Sh.UsedRange '工作表已使用区域赋给rng
If Target <> '' Then
'目标单元格不为空
If Not Application.Intersect(Target, rng) Is Nothing Then
'与使用区域有交集才运行下面的代码
Dim c As Range
' Set rng = Sh.UsedRange
rng.Interior.ColorIndex = xlNone '使用区域设置为无色
For Each c In rng '循环使用区域里的单元格
If c.Value = Target.Value Then '比较其值
c.Interior.ColorIndex = 28 '设置单元格底色
c.Font.Color = RGB(0, 0, 0) '设置字体颜色
End If
Next
End If
End If
End Sub
2 说说代码背后的含义
2.1
这一段代码,是防止用Ctrl+A全选工作表时(或其它选择很多单元格的情况),让Excel卡死。
For Each ce In Target
n = n + 1
If n > 1 Then Exit Sub '如果选择区域大于1个单元格 则退出程序
Next ce
2.2
这一行代码,是清除之前的颜色,否则标记的单元格会越来越多。对于rng,其实不一定要设置Set rng = Sh.UsedRange这么大的范围,可以根据自己的需求把Sh.UsedRange改成几列或者几行的区域。
rng.Interior.ColorIndex = xlNone '使用区域设置为无色
2.3
这一行如果不要,代码就会在整个工作薄都生效。
If Sh.Name <> Sheet1.Name Then Exit Sub '如果当前工作表不是sheet1,退出程序
好了,今天就说这么多。
联系客服