Excel VBA事件——Worksheet

2020-07-28 11:27:51 浏览数 (3)

Worksheet工作表中常用的事件个人认为有3个:

1、Worksheet_SelectionChange:

选择改变的时候,意思是单元格的选择变化后发生的事件:

代码语言:javascript复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
End Sub

Target就是变化后选中的单元格。

这个事件的有个比较典型的应用场景,选择改变后,将选择的单元格所在行标上颜色,也就是所谓的聚光灯:

代码语言:javascript复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '清除有所单元格的底色
    Cells.Interior.Color = xlNone
    '设置选中单元格整行的底色
    Target.EntireRow.Interior.Color = 255
End Sub

EntireRow获取单元格的整行单元格。

Interior.Color单元格底色的颜色值,这个通过录制宏可以很容易的知道。

效果:

这种效果在查看数据的时候非常的方便,可以很好的避免看错行的情况。

当然这个代码是非常的简陋的,一旦表格本身单元格设置了底色的话,程序会清除掉原本的底色,改进的方案:

  • 设置1个自定义名称selectrow=CELL("row"),CELL("row")能够返回当前选中单元格的行号
  • 选中所有单元格,设置条件格式:
代码语言:javascript复制
=ROW()=selectrow
  • 在事件中设置工作表重新计算,因为CELL("row")在单元格选择变化的时候是不会重新计算的
代码语言:javascript复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
End Sub

这样设置的聚光灯只能高亮显示1行,好处是不会清除原本的单元格底色。

2、Worksheet_Change:

这个的改变是指单元格的数据变化后发生的事件,而其实这个变化是只要单元格进入了编辑状态,再退出编辑状态的时候,就是变化了:

代码语言:javascript复制
Private Sub Worksheet_Change(ByVal Target As Range)
    
End Sub

这个可以用来监控数据的变化,比如某个单元格数据是否改变成了某个目标,如果是就可以执行某种代码。

3、Worksheet_BeforeDoubleClick

这个就是对单元格进行双击,双击后正常是进入编辑状态,在进入编辑状态之前发生的事件。

代码语言:javascript复制
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
End Sub

这个事件一个比较典型的应用场景是,比如某列存放了一些文件的路径,希望双击的时候打开对应的文件:

代码语言:javascript复制
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Row > 1 Then
        '第一行是标题,文件路径从第2行开始
        If Target.Column = 2 Then
            '存放在B列
            If VBA.Dir(Target.Value, vbDirectory) <> "" Then
                '文件存在的情况下,打开文件(这里举例打开Excel文件)
                Workbooks.Open Target.Value
                '打开文件就不需要进入编辑状态了
                Cancel = True
            End If
        End If
    End If
End Sub

工作表事件的代码是放在Sheet#里面的,如果仔细看过Workbook的事件,应该会发现其实Workbook事件里也有类似上面提到的那几个事件:Workbook_SheetSelectionChange、Workbook_SheetChange、Workbook_SheetBeforeDoubleClick。

名称里多了Sheet,这个事件的意思就是针对所有的Sheet都有效果的,使用方法差不多,可以去尝试用用。

工作表事件还有一些其他的事件,也可以去尝试用用,根据自己的实际情况选择去使用。

0 人点赞