VBA入门之三《夏夜,我们看萤火虫》转自 山菊花老师的作品 :http://club./viewthread.php?tid=183192&replyID=&skin=0
气温日见上升,在没有空调的电脑房里笑傲秋老虎,真英雄也。苦在今宵,乐在明朝,坚持吧,满嘴VBA行话,是不是你长久期待、梦寐以求的酷? 1、“事件”像萤火虫,有心看它,你会觉得很美。 开关一按,灯亮了 把手一扬,的士靠边停下 老师说“下课”,同学们涌出教室 灯亮了、的士停下、涌出教室都是“事件”,这些事件的发生都有前因后果,因为“一按”,所以“亮了”等等。在特定环境下,什么样的动作与什么样的事件都是一一对应的。 三句不离本行,我要说的是,在VBA工程中,存在许许多多的事件。 还记得吗?点击按钮,弹出一个对话框“哈哈,我会 VBA 啦……” 还记得吧?点击按钮,为A8单元格填充了一个数据。 因为“点击”,所以发生后面的“事件”。 打开下面的附件,有两个工作表,用鼠标去点击按钮和图片,稍后回来,我们一起讨论“事件”。 evP72Cf8.rar (81.74 KB)
2、“事件”像萤火虫,有心看它,总想知道它在哪发光。 在第一个工作表中,有两个按钮,当你把鼠标移到它上面时,它就移动一个位置。第二个工作表中,用左键和右键得到不同的运行效果。这都是运用“事件”的效果。 ①鼠标单击事件Click。 实际上,我们从第一讲开始就接触了“事件”,只是没有提它,你也可能没有在意。打开你编写过代码的工作簿,在VBE编辑窗口中可以看到,无论按钮的名称是CommandButton1,还是CommandButton2,代码第一行的后面都是“_Click()”: QUOTE:
Private Sub CommandButton1_Click() MsgBox "哈哈,我会 VBA 啦……"
这个“Click”表示“鼠标的单击事件”。 就像你家的开关不能控制他家的灯一样,用鼠标单击不同的控件,都发生“Click”事件,但触发运行的代码却各不相同,点击CommandButton1,运行: QUOTE:
Private Sub CommandButton1_Click() End Sub
点击CommandButton2,运行: QUOTE:
Private Sub CommandButton2_Click() End Sub
②鼠标移动事件。 单击控件时,触发“Click”事件,除了该事件,还有哪些“事件”呢? 在上面附件中找到如下代码(如果找不到,先到楼下看看,记着回来哦): QUOTE:
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) CommandButton1.Top = CommandButton1.Top + 10
“MouseMove”是移动鼠标事件。如果你想在鼠标移动到CommandButton2时返回什么信息或者修改某单元格的值,那么你应该把代码写在: QUOTE:
Private Sub CommandButton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
哄小孩子的把戏结束了,小孩子不会知道这是点击鼠标按钮事件“MouseDown”,但你会知道,应该知道。 QUOTE:
Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
MouseDown 与 Click 好像是同一回事,点击鼠标左键既触发“Click”事件,又触发“MouseDown”事件,它们之间的区别是,“MouseDown”发生在鼠标按下按钮还没有松开的那一段时间,接着松开鼠标又触发“MouseUp”事件,“Click”是整个过程,点击过按钮后,先触发“MouseDown”事件,后触发“Click”事件。另一个区别是,鼠标右键点击控件,不触发“Click”事件。 除了以上介绍的“事件”,还有许多: 激活工作表的时候,触发Activate事件。 当用鼠标右键单击工作表时产生BeforeRightClick事件。 打开工作簿时,触发Open事件。 打印工作表时,触发BeforePrint事件。 等等 不同对象间的事件不一定相同,如按钮有13个事件,工作表有9个事件,工作簿有28个事件,以后会掌握的。 3、控件的名称 按钮和其它所有的控件,都有默认的名字,但允许修改它。
4、工程、模块、过程 下图所示的窗口称为“工程资源管理器”。一个工作簿对应一个VBA“工程”,工程下面分若干“模块”,模块中可以有若干“过程”。
右键单击工作表标签,选择“查看代码”,自动打开该工作表对应的模块。 在工程资源管理器里,双击模块名,打开该模块。可以浏览和编辑该模块下的过程代码。 VBE主窗口是代码编辑器,灰色线条分开的是各个过程。 2楼说到哪里了?回头看一遍,接着下楼继续。 5、“事件”像萤火虫,只要你喜欢,可以捧在手心,可以把它放飞。 看这个帖子,可谓喜忧参半,VBA逐渐被我们掌控和驯服,这是喜,可是,那比火车还长的过程名,让人看了心里发毛,怎么记呀,怎么写呀?就像这: QUOTE:
Private Sub CommandButton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub 是啊,谁能把它背下来。不用背,我就没背过,相信你也不用,耳听为虚,眼见为实: 在控件所在模块中,点击如图所示的“对象”下拉菜单,你工作表中添加的控件,都在这个列表中。如图所示,选择它。 [attach]170593[/attach]
练习:把按钮改为图片控件(Image),自己定义它的运动方向和规则,再作练习。
6、“事件”像萤火虫,东边在飞,西边也在飞。 与控件存在事件一样,工作表也存在事件,共有9个。这9个事件当中,其中有两个是编程中最常用到的,可称亨哈二将,在此认识认识它: ①选定新的单元格区域时,产生SelectionChange事件。 ②改变单元格的值时,产生Change事件。 [attach]170594[/attach]
这两个事件是非常实用且常用的,在网上有大量的实例,建议大家多交流这方面的学习、应用心得。 应用示例一二: http://club./viewthread.php?tid=160432&extra=&page=1#366377 无拘无束的数据有效性 :http://club./viewthread.php?tid=160679&replyID=&skin=0 有些新的东西请借助系统帮助或其它参考书理解它或提出来讨论。 前面介绍过,VBA工程中有一个工作簿模块,双击它,在对象下拉列表中选择“Workbook”,从右边的过程列表中可以看到,工作簿共有28个事件。我们也来认识其中的一两个: ①打开工作簿时,产生 Open 事件,系统自动运行代码。把下面代码加入到工作簿模块中,试试: QUOTE:
Private Sub Workbook_Open()
MsgBox "现在打开 " & ThisWorkbook.Name & " " & Chr(13) _ & "工作簿共有 " & Worksheets.Count & " 个工作表", 64, "信息" End Sub 通常在这个过程中,处理一些初始化的事务,清除工作表中无用数据、打开自定义窗体、验证用户权限等。 ②打印工作簿时,产生BeforePrint事件。示例: [attach]170595[/attach] 7、“事件”像萤火虫,如果喜欢,她们都是你的。
QUOTE:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 再会。 |
|
来自: 9 1 1 > 《Excel VBA》