设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] 求助:如何保证第二页的各控件值不为空

[复制链接]
跳转到指定楼层
1#
发表于 2010-2-27 23:41:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想知道,如何编程保证指定页,比如第二页的各控件如文本框,组合框,复选框等值都有值,而其它页上有无空值都无所谓。如果第二页有控件值为NULL,则出错。

因为控件太多,十多个,我不想挨个挨个的判断。如果不涉及到指定页,代码我也会写,

    For Each ctl In Me.Controls '控件名不能为空
        If  IsNull(ctl) Then
            MsgBox ("数据未填完,请填好数据")
            ctl.SetFocus
            Exit Sub
        End If
    Next

但涉及到页,我就不知该怎么写了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-2-28 08:49:12 | 只看该作者
本帖最后由 todaynew 于 2010-2-28 09:26 编辑

可以用第二页和第三页两个分页符控件的top属性确定控件选取范围。选取时判断控件的top属性值是否落在取值范围内即可。

Private Sub Command233_Click()
'实例在此处进行判断,根据实际需要可用其他事件.
Dim ctl As Control
Dim ctls As Controls
Dim B As Boolean
Set ctls = Me.Form.Controls
For Each ctl In ctls
    B = ctl.Top > Me.Page1.Top '如果后面还有分页符,需判断小于后一分页符的top
    B = B And (ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox)
    If B = True Then
        If ctl.Value <> Null Then
           '此处写算式
        Else
            MsgBox ctl.Name & "为空,退出子程序"
            Exit Sub
        End If
    End If
Next ctl
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2010-2-28 13:49:41 | 只看该作者
本帖最后由 简 于 2010-2-28 14:10 编辑

谢谢todaynew,又帮我解决了一个问题。

我个人认为,代码似乎这样写要合理些。

Private Sub Command233_Click()
'实例在此处进行判断,根据实际需要可用其他事件.
Dim ctl As Control
Dim ctls As Controls
Dim B As Boolean
Set ctls = Me.Form.Controls
For Each ctl In ctls
    B = ctl.Top > Me.Page1.Top

    B = B And (ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox)
    If B = True Then
        If isnull(ctl.Value) Then
            MsgBox ctl.Name & "为空,退出子程序"
            Exit Sub
        End If
    End If
Next ctl


'这里再写算式

End Sub

你说呢。

我以往的解决办法就是在控件名上加个标志,比如参与计算的ctl.name开头统一为“ZZ”,然后再用isnull(ctl.value) and left(ctl.name,2)="ZZ"来进行判断。

这两种方法,可能各有所长吧。
4#
 楼主| 发表于 2010-2-28 14:13:17 | 只看该作者
不管哪样,todaynew,你的方法让我的思路变开阔了许多,呵呵。
5#
发表于 2010-2-28 17:01:37 | 只看该作者
谢谢todaynew,又帮我解决了一个问题。

我个人认为,代码似乎这样写要合理些。

Private Sub Command233_Click()
'实例在此处进行判断,根据实际需要可用其他事件.
Dim ctl As Control
Dim ctls As Controls
...
简 发表于 2010-2-28 13:49


均可。我的写法是将需要循环计算的部分直接在前面进行了。你的写法是在判断完后,进行计算,如果也需要循环的话,较之多一些语句。
6#
发表于 2010-3-4 11:33:30 | 只看该作者
学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 08:37 , Processed in 0.093788 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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