VBA学习笔记54:窗体事件程序
学习资源:《Excel VBA从入门到进阶》第54集 by兰色幻想
一、概述
窗体事件,是作用于窗体上的动作引发的程序的自动运行。
Private Sub UserForm_Activate()
End Sub
1. 窗体加载事件:当窗体出现之前运行的程序
作用:可在窗体出现前先运行一些读取数据放到窗体中、出现某些提示等。
Private Sub UserForm_Initialize()
MsgBox Me.Caption '在窗体运行前,先在信息窗口显示窗体的名称。
End Sub
2. 窗体关闭前的事件
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = 1 '不允许关闭窗体,或写成cancel=true,true的值是1
End Sub
Cancel 值为>0的值时禁止关闭动作的发生。通常因为不希望用户使用右上角的“X”、或者使用“控制”菜单中的“关闭”命令,所以才使用这句代码。希望用户去完成某些条件才关闭窗体。
CloseMode 关闭的模式:
3. 窗体关闭后的事件(较少用)
Private Sub UserForm_Terminate()
MsgBox "窗体已关闭。"
End Sub
4. 窗体活动和非活动事件
当对象成为活动窗口时, Activate事件发生。当对象不再是活动窗口时,停用事件发生。
当切换到其他的程序时,窗体就会接收到一个Deactivate事件:当窗体重新获得输入焦点的时候,就会接收到一个Activate事件。如果通过设置窗体的Visible属性为False或者使用窗体的Hide方法哲时将窗体变为不可见,同样的事件次序就会发生。(举例见帮助文档——下方链接,似乎使用也不多,就不举例了)
Private Sub UserForm_Deactivate()
End Sub
5. 窗体的单击事件
上面第二点,我们使用了窗体关闭前的事件,禁止用户使用用户使用右上角的“X”关闭窗体,这里我们使用点击事件来关闭窗体,只要点击窗体就关闭窗体。
Private Sub UserForm_Click()
Unload Me '退出窗体
End Sub
6. 键盘事件
① 按下键时KeyDown(最常用)
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 65 And Shift = 2 Then '判断是否按下ctrl+a组合键,并返回提示。
MsgBox "你按下了ctrl+a组合键"
End If
End Sub
- keycode是指按下键的键标号,一键一标号。(太多了,使用时可百度,不在此列出,或通过事件程序,msgbox keycode,按下按键就反馈它的keycode)
- 这里的shift是泛指的名称,包括三种按键:按Shift返回1,按ctrl返回2,Atl返回4。
② 按下键后起来时KeyUp
Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox "KeyCode:" & KeyCode
End Sub
③按下键时KeyPress
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox "KeyAscii:" & KeyAscii
End Sub
- KeyAscii是键盘输入后传递给程序的ASCII码,受大小字写的影响,一个键也会有两个码,且它无法监控方向键。
键盘事件的顺序是keydown→keypress→keyup,三者主要的区别是触发程序发生的时间有所不同。
7. 鼠标事件
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 And Shift = 3 Then
MsgBox "你在坐标为x:" & X & " Y:" & Y & " 的位置点击了鼠标左键,并且按下了ctrl+shift组合键"
End If
End Sub
- 鼠标button 值按左键返回1,按右键返回2,按中键返回4
- shift 按Shift返回1,按ctrl返回2,shift+ctrl返回3,Atl按回4
- X,Y 是指点击的位置,坐标值。
同样,也有鼠标左键按下起来时MouseUp。
Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
例:① 鼠标在窗体上移动,如果按下shift键的同时,鼠标移到窗体上,按钮变回原样。
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) '鼠标移动时
If Shift = 1 Then
Me.CommandButton1.BackColor = &H8000000F
End If
End Sub
② 但按住shift键鼠标移动到按钮,按钮就会变红色。
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Shift = 1 Then
CommandButton1.BackColor = &H8080FF
End If
End Sub