Excel VBA事件——Worksheet
Worksheet工作表中常用的事件个人认为有3个:
1、Worksheet_SelectionChange:
选择改变的时候,意思是单元格的选择变化后发生的事件:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Target就是变化后选中的单元格。
这个事件的有个比较典型的应用场景,选择改变后,将选择的单元格所在行标上颜色,也就是所谓的聚光灯:
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:
这个的改变是指单元格的数据变化后发生的事件,而其实这个变化是只要单元格进入了编辑状态,再退出编辑状态的时候,就是变化了:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
这个可以用来监控数据的变化,比如某个单元格数据是否改变成了某个目标,如果是就可以执行某种代码。
3、Worksheet_BeforeDoubleClick
这个就是对单元格进行双击,双击后正常是进入编辑状态,在进入编辑状态之前发生的事件。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
这个事件一个比较典型的应用场景是,比如某列存放了一些文件的路径,希望双击的时候打开对应的文件:
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都有效果的,使用方法差不多,可以去尝试用用。
工作表事件还有一些其他的事件,也可以去尝试用用,根据自己的实际情况选择去使用。
- 1230: [Usaco2008 Nov]lites 开关灯
- 【推荐】C#线程篇---你所不知道的线程池(4)
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.1)
- 【LeetCode 20】关关的刷题日记45 – Valid Parenthese
- 1819: [JSOI]Word Query电子字典
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.2)
- javascript 事件基础
- 算法模板——sap网络最大流 3(递归+邻接矩阵)
- 从Hash Killer I、II、III论字符串哈希
- angularjs 缓存详解
- 算法模板——线段树7(骰子翻转问题)
- 2729: [HNOI2012]排队
- 算法模板——sap网络最大流 2(非递归+邻接表)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1426E(贪心)
- codeforces 1374E1(贪心+优先队列)
- codeforces 455A(dp)
- codeforces 1296E1(贪心+思维)
- codeforces 1216E1(数学+暴力)
- JDBC基础入门使用
- codeforces 1353E(dp)
- codeforces 1396A(构造)
- codeforces 1335E1+E2(思维)
- JSP开发基础入门学习1
- codeforces 1407C(数学+交互题)
- codeforces 1420C1
- codeforces 1417D(思维,构造)
- Servlet基础入门学习2
- codeforces 1426D(思维)