VB6.0为什么使用Datediff函数时有时候老是出现即时错误'13'类型不符?

Form1有四个按钮,按照Command1的点击次数时的系统时间在Form2中的Label13579和Text13579里显示,按照Command2的点击次数时的系统时间... Form1有四个按钮,按照Command1的点击次数时的系统时间在Form2中的Label13579和Text13579里显示,按照Command2的点击次数时的系统时间2468、10显示。最后一列显示时间差值。Datediff为什么有时候提示类型不符的错误? 展开
 我来答
网海1书生
科技发烧友

2016-09-20 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部

在VB6中,类似下面的声明变量的方式其实是错误的(至少是不合理的):

Dim T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 As Date

因为它相当于:

Dim T1

Dim T2

Dim T3

Dim T4

Dim T5

Dim T6

Dim T7

Dim T8

Dim T9

Dim T10 As Date

也就是说只有T10才是你预料中的Date型,而T1到T9都是默认的Variant型!

虽然说Variant型变量也可以作为DateDiff的参数(VB会自动把它转换为Date型),但是如果你文本框中输入的字符串不符合日期型规范,VB就无法把它转为Date型,只能作为字符串来处理,这样就会出现“类型不符”的出错提示了!

正确的方法应该是这样的:

Dim T1 As Date, T2 As Date, T3 As Date, T4 As Date, T5 As Date, T6 As Date, T7 As Date, T8 As Date, T9 As Date, T10 As Date

是的,你会觉得这看起来太罗嗦了,但是,简洁的东西不一定就是对的,啰嗦意味着安全(就像你们的父母经常在你们耳朵边唠叨的一样)。

现在还有一个问题,就是假如文本框中输入的时间数据错误,那么把它直接赋值给Date型变量时会出错的,那么可以这样来处理:

If IsDate(Form2.Text1.Text) Then  '如果Text1输入的内容符合日期时间规范
    T1 = CDate(Form2.Text1.Text)   '把Text1转换为Date型赋值给T1
Else   '如果不符合规范
    MsgBox "Text1的内容错误!"   '提示并退出
    Exit Sub
End If

其他T2、T3……也同样处理。


补充说一句,在VB.NET中,类似Dim T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 As Date的变量声明方法则是没问题的,所有变量都会是Date型

追问
谢谢!多谢了!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式