今天说一下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卡死。
2.2 这一行代码,是清除之前的颜色,否则标记的单元格会越来越多。对于rng,其实不一定要设置Set rng = Sh.UsedRange这么大的范围,可以根据自己的需求把Sh.UsedRange改成几列或者几行的区域。 rng.Interior.ColorIndex = xlNone '使用区域设置为无色 2.3 这一行如果不要,代码就会在整个工作薄都生效。
好了,今天就说这么多。 |
|
来自: 書生的图书馆 > 《Excel vba》