实例:下面的示例实现一个定时器功能。代码实现了所有与事件相关的方法、属性和语句,包括Event 语句。该示例使用一个窗体,该窗体有两个按钮,以及两个文本框。单击按钮后,第一个文本框显示提示内容,第二个文本框中时钟开始计时。 建立一个类,命名为mytimeOption ExplicitPublic Event UpdateTime(ByVal mynow As Double)Public Event dabiao()Public Sub TimerTask(ByVal biaozhun As Double) Dim myStart As Double Dim mySecond As Double Dim myFar As Double myStart = Timer myFar = myStart Do While Timer < myStart + biaozhun If Timer - myFar >= 1 Then myFar = myFar + 1 RaiseEvent UpdateTime(Timer - myStart) End If Loop RaiseEvent dabiao Do While Timer >= myStart + biaozhun If Timer - myFar >= 1 Then myFar = myFar + 1 RaiseEvent UpdateTime(Timer - myStart) End If LoopEnd Sub 建立一个窗体:Option ExplicitPrivate WithEvents mText As mytime Private Sub CommandButton1_Click() TextBox1.Text = "开始计时:" TextBox2.Text = "0" mText.TimerTask (9)End Sub Private Sub CommandButton2_Click() EndEnd Sub Private Sub mText_dabiao() TextBox1.Text = "已经达到标准" DoEventsEnd Sub Private Sub mText_UpdateTime(ByVal mynow As Double) TextBox2.Text = Str(Format(mynow, "0")) DoEventsEnd Sub Private Sub UserForm_Initialize() TextBox1.Text = "" TextBox2.Text = "" Set mText = New mytimeEnd Sub Private Sub UserForm_Terminate() EndEnd Sub 代码的运行过程及解释:1) 在窗体的构建过程中TextBox1.Text = "";TextBox2.Text = "";Set mText = New mytime;这里mytime 是一个类,Set mText = New mytime就是将mText实例了一个新的mytime的类。 2) 我们点击“开始按钮”,这个时候TextBox1.Text = "开始计时:",然后在第二个文本框中显示计时的开始为0, TextBox2.Text = "0",然后执行类的TimerTask过程,(什么是过程呢?其实就是方法、函数、事件的总称).此处的过程指的是方法,会传递一个参数9,mText.TimerTask (9)。 3) 我们看看上述类的过程是如何执行的. mText.TimerTask (9) Public Sub TimerTask(ByVal biaozhun As Double) Dim myStart As Double Dim mySecond As Double Dim myFar As Double myStart = Timer myFar = myStart Do While Timer < myStart + biaozhun If Timer - myFar >= 1 Then myFar = myFar + 1 RaiseEvent UpdateTime(Timer - myStart) End If Loop RaiseEvent dabiao Do While Timer >= myStart + biaozhun If Timer - myFar >= 1 Then myFar = myFar + 1 RaiseEvent UpdateTime(Timer - myStart) End If LoopEnd Sub上面的过程中先定义了几个变量,然后将执行一个循环,循环执行到RaiseEvent UpdateTime(Timer - myStart)会触发事件UpdateTime(Timer - myStart). 4) 关于UpdateTime(Timer - myStart)事件.这个事件是在类模块中Public Event UpdateTime(ByVal mynow As Double)进行声明的相应的是myclass事件,我们回到窗体的代码,看看这个事件的过程。Private Sub mText_UpdateTime(ByVal mynow As Double) TextBox2.Text = Str(Format(mynow, "0")) DoEventsEnd Sub这个事件就是在textbox2的文本框中显示一个值,这个值是TimerTask传递过来的.显示值后,会DoEvents。交出程序的控制权,也就是说程序会向下进行。 5) 程序向下进行仍是执行的是第一个循环语句。 6) 当第一个循环语句结束时,会执行RaiseEvent dabiao,会触发dabiao事件,这个事件同样也是在类模块中声明的Public Event dabiao(),是mText的事件。仍是回到窗体代码看看这个事件过程:Private Sub mText_dabiao() TextBox1.Text = "已经达到标准" DoEventsEnd Sub这个时间在文本框中显示已经达到标准。执行完后交出程序的控制权。 7) 程序执行完上面的代码后将向下执行第二个循环。这个循环和上面第一个循环类似。 好,我们看看程序的运行: 当点击结束,程序将停止运行。 今日内容回向:1 如何利用一个类的方法?2 方法、事件的区别是什么?本讲内容参考程序文件:VBA-CLASS(1-28).xlsm 我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:① 7→1→3→2→6→5或者7→4→3→2→6→5。② 7→8各套教程内容简介: 第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用