excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 突出显示高亮行列

本文于2023年8月20日首发于本人同名其他平台,更多文章案例请搜索关注!

内容提要

  • 突出显示行列

大家好,我是冷水泡茶,大家在核对检查数据的时候,特别是在对整行或整列数据进行检查的时候,有没有发生过看错位的现象?反正我是有过,比如要检查某个科目每个月的发生额有没有异常情况:

我们可以把一行或一列标上颜色,这样看得就比较清楚了,但是手工去标色,不仅费事,而且还得手工把它取消,否则这标一下,那标一下,表格看起来就可能有点让人眼花缭乱。

今天我跟大家分享一个使用VBA代码对所选单元格行、列同时标色的方法,我们一起来看看吧:

基本思路

1、选中一个单元格,把它的行、列标上特定的颜色,如果要设置字体、边框等也可以根据实际需要来操作。

2、当选中另一个单元格时,除了把当前单元格所在行、列标色外,还要取消上次标色的区域,如果设置了其他格式,也一并清除。

程序代码

1、模块1,HighLight过程,高亮显示:

Public LastRange As Range ' 用于存储上次突出显示的区域Public currCell As RangeSub HighLight()    On Error Resume Next    Dim dataRange As Range    Dim currRange As Range    Dim lastRow As Long    Dim lastCol As Long        '获取工作表的数据区域,这里假设数据区域从A1开始,向右和向下延伸    With ActiveSheet        lastRow = .UsedRange.Rows.Count        lastCol = .UsedRange.Columns.Count        Set dataRange = .Range("A1").Resize(lastRow, lastCol)        '检查上次是否有突出显示的区域,如果有,还原它们的格式        If Not LastRange Is Nothing Then            LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示            Set LastRange = Nothing ' 清除上次突出显示的区域        End If        '检查选定的单元格是否在数据区域内        If Not Intersect(currCell, dataRange) Is Nothing Then            Set currRange = Union(currCell.EntireRow, currCell.EntireColumn)            Set currRange = Intersect(currRange, dataRange)        Else            Set currRange = Union(currCell.EntireRow, currCell.EntireColumn)        End If        currRange.Interior.Color = RGB(245, 245, 220)        Set LastRange = currRange    End WithEnd Sub

代码解析:

(1)定义公共变量,lastRange,上一个高亮区域;currCell,当前单元格。

(2)设置数据区域为当前活动工作表的已使用区域。

(3)检查LastRange,如果不为空,则把它的格式清除(根据高亮的格式对应清除设置)。

(4)判断当前单元格是否在数据区域之内,如果在的话,就把当前区域设置在数据区域之内,以当前单元格为中心的十字区域;如果当前单元格不在数据区域之内,则把当前区域设置为以当前单元格为中心的十字区域(整行、整列)

(5)对当前区域标色,可以根据需要调整设置。

(6)把当前区域赋值给LastRange,以备在选择单元格变化、工作表切换、文件关闭时,清除其格式。

2、其他过程::

Private Sub Worksheet_SelectionChange(ByVal Target As Range)    Set currCell = Target.Cells(1, 1)    Call HighLightEnd SubPrivate Sub Worksheet_Deactivate()    If Not LastRange Is Nothing Then        LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示        Set LastRange = Nothing ' 清除上次突出显示的区域    End IfEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)    If Not LastRange Is Nothing Then        LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示        Set LastRange = Nothing ' 清除上次突出显示的区域    End If    ThisWorkbook.SaveEnd Sub

代码解析:

(1)Worksheet_SelectionChange工作表的选择区域变化事件,把currCell设置为目标区域的第一个单元格,避免多行多列高亮。然后调用HighLight过程。

(2)Worksheet_Deactivate,工作表变为非激活状态事件,就是激活了其他工作表,则清除上次设置的高亮格式

(3)Workbook_BeforeClose,工作表关闭前事件,清除上次设置的高亮格式,保存工作表

~~~~~~End~~~~~~

喜欢就点个、点在看留个言呗!分享一下更给力!感谢!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接