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

Form1有四个按钮,按照Command1的点击次数时的系统时间在Form2中的Label13579和Text13579里显示,按照Command2的点击次数时的系统时间2468、10显示。最后一列显示时间差值。Datediff为什么有时候提示类型不符的错误?

在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型

追问

谢谢!多谢了!

温馨提示:内容为网友见解,仅供参考
无其他回答

vb6.0 Datediff("n","a","b")计算时间差,为什么总是提示类型不匹配
Datediff("n", a, b)

在VB6.0中,DateAdd函数中,用"w","y"与"d",我怎么感觉都一样呀,都...
在VB6.0的DateAdd函数中,关于参数"w", "y", "d"的使用,可能让人产生疑惑,但实际上它们表示的日期含义有所不同。首先,让我们来看DateAdd函数的具体表现:DateAdd("d", 2, d) 用于增加天数,如加2天,会得到2018-1-31的日期。如果用DateAdd("y", 2, d),尽管看起来是加2年,但实际是...

VB计时器怎么用
1、首先打开VB6.0程序设计软件,到程序新建工程主界面,如下图:2、然后双击新建工程里的”标准 exe“进入工程1(forml)如下图:3、在左边工具栏窗体上先加载一个计时器控件 如图:4、加载好计时器控件后,我们在当前计时器控件下面加载一个标签。5、为了使加载的标签在运行时能把它看清楚,通过修改...

VB 如何用一个固定日期加上一个变量天数得出新的日期
VB6.0可使用Date数据类型来进行计算。Date 数据类型,Date 变量存储为 IEEE 64 位(8 个字节)浮点数值形式,其可以表示的日期范围从 100 年 1 月 1 日到 9999 年 12 月 31 日,而时间可以从 0:00:00 到 23:59:59。任何可辨认的文本日期都可以赋值给 Date 变量。日期文字须以数字符号 (#...

VB6.0:如何通过xmlhttp对象,获取多个URL的HTML代码?
500表示服务器错误等等。轮询的时候可以加个计数器,达到某个数值时就跳出继续读取下个网页或结束读取,这样就可避免某个网页打开速度过慢而影响整个读取过程。更好的解决办法是一次性声明多个xmlhttp对象变量(建议用数组),这样就可以同时获取多个网页的代码。当然这种情况下就必须使用异步调用方式。

用VB作倒计时怎么弄,要求用DATEDIFF函数。。把具体代码写出啦,谢谢...
Text0 = DateDiff("d", Date, endtime)Text2 = Hour(endtime) - Hour(Time)Text4 = Minute(endtime) - Minute(Time)Text6 = Second(endtime) - Second(Time)End Sub 将窗体的计时器间隔设为1000.记得VB有的版本无计时器事件,你得往窗体添加一个不可见的计时器控件,再添加它的事件过程和...

VB6.0 怎么实现自动生成编号?
'说明文件不存在 Open fname For Output As #1 Print #1, "id=0"Print #1, "id=0"idnum(1) = 0 idnum(2) = 0 Close #1 Else '文件存在读取id值 Open fname For Input As #1 Dim aline As String Line Input #1, aline idnum(1) = Val(Mid(aline, 4))Line Input #1, aline ...

vb中如何定义时间,使用date吗?
用 Date 类型定义时间变量 如:dim a as date dim b as date dim c as date 下现举个应用的例子:dim a as date dim b as date a=#15:30 b=#2:40 Debug.Print DateDiff("h", a, b)上面的例子是求两个时间相差多少小时

vb和delphi是什么来着的啊
VBS不使用VB运行库运行,而是由Windows脚本宿主(wscript.exe - Microsoft Windows Based Script Host)解释执行。这两种语言之中的不同点影响ASP网站的表现。当微软准备开发一种新的编程工具的时候,第一决定就是利用最抢手的 VB6 来进行修改,或者就是重新组建工程开发新工具。微软后来开发了VB的继任者Visual Basic ....

请问什么是ASP?
使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。比如:asc(“a”)表示小写字母“a”的ANSI 字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的ASCII码。比如“chr(10)”表示换行符,“chr(13)”表示回车...

相似回答