使用 VBA 从主菜单打开一个表单,其中一个字段为空/空白

Posted

技术标签:

【中文标题】使用 VBA 从主菜单打开一个表单,其中一个字段为空/空白【英文标题】:Use VBA to open a form from a main menu where one of the fields is null/blank 【发布时间】:2019-08-27 00:30:07 【问题描述】:

我是 VBA 新手并开始了解基础知识,但是,我无法从主菜单打开一个表单(这只是一个没有记录源的表单),其中一个字段为空/空白.我正在使用一个带有点击事件的按钮来实现这一点。

我可以通过将字段设置为特定值来打开表单,以打开具有该值的所有记录。例如,以下代码有效:

DoCmd.OpenForm "frm_Projects" , , , "Status='Active'"

但是,我在表单中有一个注释字段,当该字段为空/空时,我希望它只显示那些记录。其他字段可以填写。

我尝试了以下方法:

(1) 加载一个空白表单,就像我正在尝试添加新记录一样

DoCmd.OpenForm "frm_Project", , ,"txt_Notes='Is Null"

(2) 给我一个“运行时错误'2450':”

If IsNull([Forms]![frm_Project]![txt_Notes]) Then
   DoCmd.OpenForm "frm_Project"
Else
   MsgBox "Some text"
End If

【问题讨论】:

【参考方案1】:

不要在Is Null 中使用等号。另外,单撇号也不合适。

DoCmd.OpenForm "frm_Project", , , "txt_Notes Is Null"

第二个代码缺少右括号。

If IsNull([Forms]![frm_Project]![txt_Notes]) Then

但是,不能引用尚未打开的表单字段。需要在主表单(或打开“搜索”表单)上为用户选择他们想要用于打开表单或报告的标准。或者如果您不希望用户有任何输入,代码需要查询数据源以查看是否有任何记录符合要求。 DCount 或 DLookup 域聚合函数可以做到这一点。

If DCount("*", "your table or query name", "txt_Notes Is Null") > 0 Then
    DoCmd.OpenForm "frm_Project", , , "txt_Notes Is Null"
Else
    DoCmd.OpenForm "frm_Project"
End If

这假定字段中不允许出现空字符串。我从不允许文本字段中出现空字符串。 Null 和空字符串不是一回事。如果可能出现空字符串,则必须调整代码。处理 Null 和空字符串:"Nz(txt_Notes,'')=''"

【讨论】:

对于DoCmd.OpenForm "frm_Project", , , "txt_Notes Is Null",我得到一个“输入参数值”的弹出窗口,就好像我在进行查询搜索一样。如果我点击 OK 或输入文本,它会加载一个空白表单。我收到与If IsNull([Forms]![frm_Project]![txt_Notes]) Then 相同的错误 我尝试了使用 DCount 和 DLookup 的 If 语句,我得到“运行时错误 '3075':查询表达式 '*' 中的语法错误(缺少运算符)。”我会在哪里添加您对使用 "Nz(txt_Notes,'')=''" 处理 Null 和空字符串的建议? (对不起,我不知道两者之间的区别)。提前感谢您的帮助! 用它代替"txt_Notes Is Null"。两个版本都适合我。编辑问题以显示尝试的新代码。 Null 表示什么都没有,zilch,nada;一个空字符串是什么。 Null 不能与任何东西进行比较,因为没有什么可比较的,即使是 Null。这就是为什么在测试 Null 时必须使用 Is NullIsNull()Nz() 的原因。 allenbrowne.com/casu-12.html

以上是关于使用 VBA 从主菜单打开一个表单,其中一个字段为空/空白的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA - 使用组合框(多值字段)时类型不匹配

oMail - 将更改的合并字段从数据库表单添加到 vba 代码

可以通过 VBA 更改 MS Access 子表单字段吗?

使用 VBA 代码有条件地使表单行的(详细信息)按钮变灰

使用从 VBA 代码派生的值填充表中的字段

如何更改我的 VBA 脚本以显示特定字段设置为“空”的所有记录?