网站首页 > 技术文章 正文
我们知道,在Excel中进行公式运算时,随着单元格数据的变化,公式单元格中的结果也会随之自动更新,如下面简单的演示。
Excel VBA中有一类称作“事件”的过程程序,能够对我们的操作自动作出相应的响应。例如,每次打开工作簿时,自动弹出一个设定好的信息框。
这是响应工作簿的Open事件,即在打开工作簿时Excel所发生的行为。
在VBE编辑器中,单击工作簿或者工作表模块,然后在代码输入窗口顶部左侧列表框中选择工作表对象名,在右侧列表框中会出现供选择的相应的事件。通常,在左侧列表框中选择对象名后,Excel会自动在代码输入窗口中放置默认的事件,如工作表的SelectionChange事件。
事件响应所执行的操作就是我们在事件过程中放置的代码,这些代码规定了我们希望事件发生时要做什么。
在《Excel实战技巧8:基于当前单元格实时显示相关数据记录》中,当用户在工作表第1列含有数据的单元格中移动时,会自动弹出一个窗体,并显示该单元格所在行的详细信息。
这里就是使用了工作表的SelectionChange事件,其代码如下:
Dim lngRow As Long
Private SubWorksheet_SelectionChange(ByVal Target As Range)
Dim rngBottom As Range With wksUserInfo
'查找列A中最后使用的单元格
Set rngBottom = .Range("A"& .Rows.Count).End(xlUp)
End With
'卸载原来的用户窗体
If lngRow <> Target.Row Then
Unload ufmUser End If
'当前单元格位于第1列且具有数据时才显示用户窗体
If Target.Column = 1 And Target.Row > 1 And Target.Row <=rngBottom.Row Then
ufmUser.Show 0 '无模式窗体
End If
'填充用户窗体
'在工作表单元格发生改变后能实时反映到用户窗体中
ufmUser.PopulateRecord
'更新用户窗体显示
'当活动单元格变化后,显示该单元格所在行的内容
lngRow = Target.Row
End Sub
注意到,事件过程含有参数,允许将相应的值通过参数传递给事件过程。例如本例中的参数Target,将当前单元格传递到过程。
有时候,一个事件可能触发其他事件,包括该事件本身,从而带来连锁反应。例如,修改工作表单元格中的数据时,会触发Worksheet_Change事件,此时如果事件中的代码修改了另一个单元格中的数据,那么会再次触发该事件,再该事件会再次修改单元格,这引起事件的又一次触发,如此反复循环。这往往不是我们所需要的。
可以使用:
Application.EnableEvents = False
临时禁止触发事件,从而防止发生这类情形。当达到目的后,再重新启用触发事件:
Application.EnableEvents = True
例如:
Private Sub Worksheet_Change(ByValTarget As Range)
Application.EnableEvents = False
If Target.Column = 1 Then
Range("C1") = Target.Value
End If
Application.EnableEvents = True
End Sub
Excel定义了与工作簿对象、工作表对象等相关的一系列事件,还可以使用VBA自定义事件。一般来说,常使用的Excel事件有:
Excel应用程序事件,即根据Excel本身的操作来响应的事件,例如响应新建工作簿的NewWorkbook事件。
工作簿事件,即根据操作工作簿的动作来响应的事件,例如打开工作簿的Open事件。
工作表事件,即根据操作工作表的动作来响应的事件,例如选取工作表单元格变化时的SelectionChange事件。
图表事件,即操作图表时响应的事件,例如激活图表时的Activate事件。
后面的内容将主要讲解工作表事件,其他事件将在后续讲到相应的内容时再详细讲解
- 上一篇: 每天长时间盯着电脑,这三招帮你缓解眼睛疲劳
- 下一篇: Excel按单元格颜色进行求和或计数
猜你喜欢
- 2024-10-01 每天长时间盯着电脑,这三招帮你缓解眼睛疲劳
- 2024-10-01 Excel-VBA:13、Excel事件程序(vba事件怎么触发)
- 2024-10-01 excel vba常用语句干货分享,错过了就不会再有了(关注!)
- 2024-10-01 设计模式之观察者模式,事件机制的底层原理全面解析(建议收藏)
- 2024-10-01 相同单元格自动变色提醒(相同单元格自动变色提醒怎么取消)
- 2024-10-01 Excel实用技巧:根据条件,锁定某个单元格
- 2024-10-01 苹果电脑这些超实用的隐藏功能,不会用就等于白花钱了!
- 2024-10-01 办公小技巧:制作自动显示子菜单的下拉菜单
- 2024-10-01 常用的、带解释的 VBA 短句(vba常用语句详解)
- 2024-10-01 「第2辑」Excel VBA知识分享——进度条
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)