Excel工作表事件(5)- SelectionChange事件

159 篇文章 16 订阅
20 篇文章 2 订阅

Excel工作表SelectionChange事件也是最常用的事件代码之一,通俗的讲工作表选中的单元格发生变化时,此事件将被激活。
SelectionChange事件的过程框架如下,其中参数Target是Range类型变量,代表工作表中被选中的单元格区域。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
	' Your code
End Sub

需求如下:如下图中的数据表,第一列为月度,需要实现当选中表格中某个单元格时,与该行相同月份的表格区域设置黄色背景色,例如:图中选中的为D9单元格,该行月度为2020/05,第7行至第11行均为相同的月度,设置黄色背景色。当选中其他月度的表格区域时,清楚当前的背景色,并设置新区域的背景色。
在这里插入图片描述
示例代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rngMth As Range, c As Range, rngTab As Range
    Set rngTab = Range("A2:J46")
    If Target.Count = 1 Then
        If Not Intersect(Target, rngTab) Is Nothing Then
            If Target.Interior.ColorIndex = 6 Then
                Exit Sub
            Else
                rngTab.Interior.Pattern = xlNone
                For Each c In Range([a2], Cells(Rows.Count, 1).End(xlUp))
                    If c.Value = Cells(Target.Row, 1).Value Then
                        If rngMth Is Nothing Then
                            Set rngMth = c
                        Else
                            Set rngMth = Union(rngMth, c)
                        End If
                    End If
                Next c
                If Not rngMth Is Nothing Then
                    rngMth.Resize(, rngTab.Columns.Count).Interior.ColorIndex = 6
                End If
            End If
        End If
    End If
End Sub

【代码解析】
第3行代码取得表格区域,不含表头。
第4行代码判断选中的是单个单元格,才执行后续操作。
第5行代码判断激活单元格是否包含在表格区域中。
第6行代码判断激活单元格的背景色,如果已经是黄色,说明选中的单元格在着色区域中,无需处理。
第7行代码退出事件过程。
第9行代码清空表格区域的背景色。
第10~18行代码循环遍历第一列单元格。
第11行代码判断单元格中月度值是否与激活单元格所在行相同。如果相同,则将单元格合并到rngMth对象变量中。
如果rngMth对象变量为空,则使用第13行代码赋值,否则使用第15行代码合并单元格区域。
第19行代码判断rngMth对象变量是否为非空。
第20行代码设置具有相同月度值的行的背景色,rngMth对象变量为第一列相关单元格Range对象,使用Resize将该区域的列进行扩展,rngTab.Columns.Count为表格区域的列数。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值