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

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爲表格區域的列數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章