Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 七栋五零二

[分享] VBA班第6课:课堂笔记

[复制链接]
发表于 2007-7-7 23:44 | 显示全部楼层

Activate 工作表由不活动变为活动工作表时产生此事件。

Worksheet_Activate()   不需要参数

Private Sub Worksheet_Activate()
  MsgBox "当前活动工作表是" & ActiveSheet.Name
End Sub

所谓活动工作表,就是在EXCEL主界面看到的工作表

大家加入代码后,点一下Sheet2工作表,然后在点回Sheet1
Activate事件在成为活动工作表的瞬间发生,只发生一次

班长:7dong502 21:04:53
可是只认Sheet1
从Sheet2切换到Sheet3就不行了.

这是因为只有Sheet1中有Activate事件代码

但是在新打开工作簿时,活动的工作表不会触发该事件
如果希望打开工作簿时,活动的工作表也执行事件的话,需要在ThisWorkbook模块中写代码
大家记住这点例外就行了


Deactivate和Activate相反工作表由活动变为不活动工作表时 产生此事件。

去掉前面加入的代码

Private Sub Worksheet_Deactivate()
  MsgBox "你离开了我"
End Sub

大家切换到别的工作表看看效果


做一道题:
不允许用户离开Sheet1,即当离开时,再给他“拉”回来

4组:Luckyguy 21:13:00
Private Sub Worksheet_Deactivate()
  Sheet1.Activate
End Sub

3组:凌可儿 21:13:37
Private Sub Worksheet_Deactivate()
  MsgBox "不要离开我"
Sheet1.Activate

End Sub

OK

回复

使用道具 举报

发表于 2007-7-7 23:49 | 显示全部楼层

BeforeDoubleClick
当在工作表上鼠标双击时产生此事件。
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
两个参数
Target表示被双击的单元格
Cancel表示双击后正常的动作是否继续进行
重点理解一下Cancel参数


大家先在EXCEL单元格中双击看看会发生什么,即双击后正常的动作是什么
进入单元格编辑状态吧


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
End Sub
大家加入上面代码看看,再双击是什么效果
不能进入编辑状态
这就是Cancel的用途


题目:不允许用户在A1:B3区域进入编辑状态
按F2可以
聪明,现在不用考虑还有其它途径
题目:不允许用户在A1:B3区域双击进入编辑状态 ,其它区域可以


3组:天堂鼠 21:28:16
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row < 4 And Target.Column < 3 Then
 Cancel = True
End If
End Sub


OK
我们接下来看BeforeRightClick事件
BeforeRightClick
当在工作表上按鼠标右键时产生此事件。

Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
这个事件和上一个类似
只是双击变为右击
大家看看正常按右键
和加入Cancel=true或Cancel=false后按右键的区别


select和Activate区别在哪?
select就是选定,可以是一个单元格,也可是区域或多的单元格
Active是变为活动单元格,活动单元格只能有一个
活动的肯定是选定的,按选定的未必是活动的

回复

使用道具 举报

发表于 2007-7-7 23:54 | 显示全部楼层

有时我们自己写一个弹出菜单希望代替EXCEL的弹出菜单,可以在BeforeRightClick事件中用代码先弹出自己的菜单,然后Cancel=true
4组:Sanbe 21:44:09
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row < 4 And Target.Column < 3 Then
 Cancel = True
 MsgBox "不能编辑", 16
End If
End Sub

Calculate
在对工作表进行重新计算之后产生此事件。
*FollowHyperlink
当鼠标单击工作表上的任意超级链接时将发生此事件。
*PivotTableUpdate
数据透视表更新后发生


这三个事件不是很常用,我们就不讲了

下面我们探讨第3个话题
3.如何调用事件代码

我们前面说的事件都是由“事”触发的,事实上,事件作为一个过程,是可以用代码调用的
特别是在禁用了事件后,需要自己来控制代码的运行
对事件的调用和过程本质上没有区别
但不能使用命名参数的形式或省略参数,必须严格按事件过程的形式调用
事件过程默人是Private私有过程
一般只能从模块内调用

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Worksheet_Change Target
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "你选择了" & Target.Address
End Sub

我们把考虑实用性,而只展示代码的运行效果
一般情况下,选定单元格时是不会触发Change事件的,但上面的代码可以让我们在选定时运行Change事件的代码
上面的实践中没有必要性,只是说明调用方法
谁可以贴一下运行效果

也可写成Call Worksheet_Change(Target)  
呵呵~Call Worksheet_Change(Target)容易明白一点
如果需要在模块中调用,需要把默认的Private改为Public
有没有Call有什么区别啊 等一下解释

Public Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "你选择了" & Target.Address
End Sub



回复

使用道具 举报

发表于 2007-7-7 23:58 | 显示全部楼层

插入模块
Sub aTest()
  Call Sheet1.Worksheet_Change(Selection)
End Sub

Sheet1.Worksheet_Change(Selection)前面的Sheet1.是指定是Sheet1模块中的过程

Call是调用过程
对过程的调用可以直接使用
1 过程名
2 过程名 参数列表
来调用,也可使用
1 Call 过程名
2 Call 过程名(参数列表)
二者是等价的,使用Call时,如果有参数,需要用括号括起来
但修改成public不是好办法,所以实际使用时需要谨慎
更好的解决办法是使用属性过程
(property 过程),等大家学了类知识后就知道了

时间关系,我们简单做个小节
4.事件的特点小结

(1)不需要代码控制,而是因事触发

(2)是一个过程,具备过程的特点,可以被代码调用
事件代码可以主动执行,也可因Call被动执行

(3)无论是过程名称,还是参数都是系统规定好了,并且不能改变

今天的内容就是这么多,谢谢大家







回复

使用道具 举报

发表于 2007-7-8 00:51 | 显示全部楼层

感谢502和Luckyguy2008,两位辛苦了!

 

 [em27][em27][em27]

 

[em23][em23][em23]
回复

使用道具 举报

发表于 2007-7-8 08:34 | 显示全部楼层

昨天没听到课,只好今天来复习了!
回复

使用道具 举报

发表于 2007-7-8 10:44 | 显示全部楼层

有一点不明白:事件程序过程是属于私有过程,它可以被模块中的sub过程调用?私有过程程序不是只能被本模块中的过程程序调用吗?
回复

使用道具 举报

发表于 2007-7-8 10:52 | 显示全部楼层

谢谢了,辛苦班长和学习委员了,就算缺课了,还有地方自己补了,呵呵!
回复

使用道具 举报

发表于 2007-7-8 10:58 | 显示全部楼层

多谢了
回复

使用道具 举报

发表于 2007-7-8 15:51 | 显示全部楼层

QUOTE:
以下是引用杨副官在2007-7-8 10:44:11的发言:
有一点不明白:事件程序过程是属于私有过程,它可以被模块中的sub过程调用?私有过程程序不是只能被本模块中的过程程序调用吗?

注意用兄所说的,需要将private 改成public后,才能调用

 

Public Sub Worksheet_Change(ByVal Target As Range)
  MsgBox "你选择了" & Target.Address
End Sub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 00:40 , Processed in 0.326477 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表