前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用功能加载宏——单元格聚光灯

常用功能加载宏——单元格聚光灯

作者头像
xyj
发布2020-07-28 11:51:36
1.1K0
发布2020-07-28 11:51:36
举报
文章被收录于专栏:VBA 学习VBA 学习

如果Excel表格里数据比较多的时候,查看数据很容易看错行,这时候如果给要查看的这行数据标记颜色,那么查看数据就方便多了。

如果每次都手动去标记颜色,又手动去取消颜色,这肯定会很麻烦,给需要这种功能的表格添加一个“聚光灯”功能就非常的方便了:

首先在customUI.xml中增加代码:

代码语言:javascript
复制
      <button id="rbbtnHighLight" label="聚光灯&#13;" size="large" onAction="rbbtnHighLight" imageMso="PictureBrightnessGallery"/>

回调函数:

代码语言:javascript
复制
Sub rbbtnHighLight(control As IRibbonControl)
    Call MRange.HighLight
End Sub

函数实现:

代码语言:javascript
复制
'聚光灯
Sub HighLight()
    Dim str_insert_code As String
    Dim str_code As String
    Dim i As Long
    
    '构建Worksheet_SelectionChange事件代码
    str_insert_code = vbNewLine & "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
    
    str_insert_code = str_insert_code & vbNewLine & "   If Application.CutCopyMode = False Then"
                                
    str_insert_code = str_insert_code & vbNewLine & "         ActiveSheet.Calculate"
    
    str_insert_code = str_insert_code & vbNewLine & "   End If"
    
    str_insert_code = str_insert_code & vbNewLine & "End Sub"

    
    For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
        '找到活动工作表组件
        If ActiveWorkbook.VBProject.VBComponents(i).Name = ActiveSheet.CodeName Then

            With ActiveWorkbook.VBProject.VBComponents(i).CodeModule
                str_code = .Lines(1, .CountOfLines)
                
                '没有Worksheet_SelectionChange事件代码的情况下,插入代码
                If VBA.InStr(str_code, "Worksheet_SelectionChange") = 0 Then
                    .InsertLines .CountOfLines + 2, str_insert_code
                    '设置数据有效性
                    With Cells.FormatConditions
                        .Delete
                        .Add(xlExpression, Formula1:="=CELL(""row"")=ROW()").Interior.ColorIndex = 27
                    End With
                End If
            End With

            Exit For
        End If
    Next i
End Sub

这个功能的原理就是在当前活动工作表中,首先插入Worksheet_SelectionChange代码:

代码语言:javascript
复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Application.CutCopyMode = False Then
         ActiveSheet.Calculate
   End If
End Sub

只要选择改变的情况下,重新计算。

重新计算的目的就是为了激活条件格式中的函数:

代码语言:javascript
复制
=CELL("row")=ROW()

Application.CutCopyMode = False判断这个条件的目的是:

如果复制了单元格,再选中其他单元格想去粘贴的时候,ActiveSheet.Calculate会消除复制,造成无法粘贴。

注意:

这样添加的聚光灯功能只适合数据量较小的表格,如果表格太大,又有太多公式的情况下,Worksheet_SelectionChange事件会比较耗时。

另外由于插入了Worksheet_SelectionChange事件代码,如果文件保存的是不启用宏的格式,将会给出提示:

因为有加载宏一步就能添加这个功能,所以这里就可以不保存VBA代码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档