设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2080|回复: 6
打印 上一主题 下一主题

[Access本身] Between VBA 语法

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2016-5-18 12:47:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在表单内有3个栏位,栏位A是工作日期输入,栏位B设定了工作周期的开始日,栏位C设定了工作周期的结束日.我想在栏位A输入日期时的afterupdate,进行检查此工作日是否在工作周期范围以内,写了以下语法

IF ME![A]<ME![B] OR ME![A]>ME![C] THEN
MSGBOX“输入日期范围以外,请检查清楚”,vbOKOnly,“警告......”


但发现我无论输入什么日期在A,MSGBOX都会出现,那里出错了?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2016-5-18 14:13:45 | 只看该作者
因为你还没有输入B和C的数据。null的时候,A是比C大的。
正确的做法应该是在所有数据输入后再进行判断。
另外,有效性规则也是一种做法,不过同样是要先在B和C输入数据之后再对A进行判断的。——换句话说,也就是应该先输入B和C,然后再输入A。

点击这里给我发消息

3#
 楼主| 发表于 2016-5-18 14:17:38 | 只看该作者
是我的表达问题,B和C是有值的,因为在建立工作时,首先有一个下拉方格选取工作周期,之后我将开始与结束日期都带到B和C上.所以在A输入时,正常情况下B和C已经有数据了.

点击这里给我发消息

4#
 楼主| 发表于 2016-5-18 15:51:09 | 只看该作者
刚在网上找到一个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],是日期格式还是什么问题?
5#
发表于 2016-5-18 16:09:34 | 只看该作者
Dannyclock 发表于 2016-5-18 15:51
刚在网上找到一个VBA,试验过后发现问题所在

Private Sub IN_OUT_DATE_AfterUpdate()

转换为日期格式吧。在文本框或者组合框的属性里设置格式为“短日期”试试。如果仍然有问题的话,不妨前后加上"#",例如:
if dtmMyDate > "#" &MIN_DATE &"#" then

点击这里给我发消息

6#
 楼主| 发表于 2016-5-18 16:20:59 | 只看该作者
谢谢帮忙,不过你说的方法我其实都试过了,就是想不出什么原因
7#
发表于 2016-5-18 22:08:31 | 只看该作者
本帖最后由 cgsilicone 于 2016-5-18 22:10 编辑

如果MSGBOX不该出现,你看到的栏位A,栏位B,栏位C 显示的数值应该不是一样长度的,比如有的少了个0。文本控件没有指定格式,数据都是文本,你以为在比较日期,其实是在比较文本。控件有格式,但格式不一样,也是按文本进行比较的。所以,一定是格式问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-2 01:30 , Processed in 0.083709 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表