你好,你的代码里有下面三个错误。
第一个错误:
你的代码里,在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
本文详细指出了代码中关于时间计时、变量声明和使用的问题,并提供了修复方案。首先,强调了局部变量dtmBeginTime的持久化存储,其次纠正了未使用的变量定义,最后解决了数据类型不匹配导致的溢出问题。通过实例展示了如何正确设置公共变量和计算时间差以改进代码效率。
3098

被折叠的 条评论
为什么被折叠?



