分享

利用工作薄事件动态标记相同的数据

 書生的图书馆 2022-04-16

      今天说一下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 IfEnd 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,退出程序

好了,今天就说这么多。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多