Office中国论坛/Access中国论坛
标题:
Between VBA 语法
[打印本页]
作者:
Dannyclock
时间:
2016-5-18 12:47
标题:
Between VBA 语法
我在表单内有3个栏位,栏位A是工作日期输入,栏位B设定了工作周期的开始日,栏位C设定了工作周期的结束日.我想在栏位A输入日期时的afterupdate,进行检查此工作日是否在工作周期范围以内,写了以下语法
IF ME![A]<ME![B] OR ME![A]>ME![C] THEN
MSGBOX“输入日期范围以外,请检查清楚”,vbOKOnly,“警告......”
但发现我无论输入什么日期在A,MSGBOX都会出现,那里出错了?
作者:
roych
时间:
2016-5-18 14:13
因为你还没有输入B和C的数据。null的时候,A是比C大的。
正确的做法应该是在所有数据输入后再进行判断。
另外,有效性规则也是一种做法,不过同样是要先在B和C输入数据之后再对A进行判断的。——换句话说,也就是应该先输入B和C,然后再输入A。
作者:
Dannyclock
时间:
2016-5-18 14:17
是我的表达问题,B和C是有值的,因为在建立工作时,首先有一个下拉方格选取工作周期,之后我将开始与结束日期都带到B和C上.所以在A输入时,正常情况下B和C已经有数据了.
作者:
Dannyclock
时间:
2016-5-18 15:51
刚在网上找到一个VBA,试验过后发现问题所在
Private Sub IN_OUT_DATE_AfterUpdate()
Dim dtmMyDate As Date
Const MIN_DATE = #5/21/2016#
Const MAX_DATE = #6/20/2016#
dtmMyDate = [IN_OUT DATE]
If dtmMyDate > MIN_DATE And dtmMyDate < MAX_DATE Then
MsgBox "Yep"
Else
MsgBox "Nope"
End If
End Sub
如果我在VBA内指定了日期,这个语法没有问题的,出来的结果也是正常的,但当我将#5/21/2016#换成ME![B],#6/20/2016#换成ME![C].那就失效了,栏位B的数值是[2016-05-21],栏位C的数值是[2016-06-20],是日期格式还是什么问题?
作者:
roych
时间:
2016-5-18 16:09
Dannyclock 发表于 2016-5-18 15:51
刚在网上找到一个VBA,试验过后发现问题所在
Private Sub IN_OUT_DATE_AfterUpdate()
转换为日期格式吧。在文本框或者组合框的属性里设置格式为“短日期”试试。如果仍然有问题的话,不妨前后加上"#",例如:
if dtmMyDate > "#" &MIN_DATE &"#" then
作者:
Dannyclock
时间:
2016-5-18 16:20
谢谢帮忙,不过你说的方法我其实都试过了,就是想不出什么原因
作者:
cgsilicone
时间:
2016-5-18 22:08
本帖最后由 cgsilicone 于 2016-5-18 22:10 编辑
如果MSGBOX不该出现,你看到的栏位A,栏位B,栏位C 显示的数值应该不是一样长度的,比如有的少了个0。文本控件没有指定格式,数据都是文本,你以为在比较日期,其实是在比较文本。控件有格式,但格式不一样,也是按文本进行比较的。所以,一定是格式问题。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3