你好,你的代码里有下面三个错误。
第一个错误:
你的代码里,在cmdStart_Click()过程中的代码等于
Private Sub cmdStart_Click()
Dim dtmBeginTime As Date
dtmBeginTime = Time()
End Sub
这样的话,dtmBeginTime只是cmdStart_Click()过程中的一个局部变量,在该过程结束的时候就会被销毁,故你在cmdEnd_Click()过程中引用dtmBeginTime得到的值将是空的。
解决方法:将其在通用部分声明为公共变量,也可以像我下面这样取巧,利用txtSpeed.Text储存dtmBeginTime(因为控件本来就是公共的,可以把控件的属性视为公共的变量)。
第二个错误:
你的cmdEnd_Click()代码里定义了intTimeCost,却没有使用,从字面上看是想用来存储两次按下按钮的时间差,所以估计你这一行代码写错了:
dtmEndTime = DateDiff("s", dtmBeginTime, dtmEndTime)
应该改成
intTimeCost = DateDiff("s", dtmBeginTime, dtmEndTime)
第三个错误:
DateDiff返回值的类型是Date类型,而你的intTimeCost定义成了整型,所以用intTimeCost接收DateDiff的结果会发生溢出,解决方法是把intTimeCost定义为Date类型。
综上所述,最终修改的代码如下,亲测可用:
Private Sub cmdEnd_Click()
Dim intTimeCost As Date, intWordCount As Integer
Dim dtmBeginTime As Date, dtmEndTime As Date '这句可以省略,不过建议加上,这是好习惯
dtmEndTime = Time()
dtmBeginTime = txtSpeed.Text '获取刚刚存放在txtSpeed中的dtmBeginTime
intTimeCost = DateDiff("s", dtmBeginTime, dtmEndTime)
intWordCount = Len(txtInput.Text)
txtSpeed.Text = intWordCount / (intTimeCost / 60)
End Sub
Private Sub cmdStart_Click()
txtSpeed.Text = dtmBeginTime
End Sub