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")能够返回当前选中单元格的行号
- 选中所有单元格,设置条件格式:
=ROW()=selectrow
- 在事件中设置工作表重新计算,因为CELL("row")在单元格选择变化的时候是不会重新计算的
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都有效果的,使用方法差不多,可以去尝试用用。
工作表事件还有一些其他的事件,也可以去尝试用用,根据自己的实际情况选择去使用。