使用 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 Null
或 IsNull()
或 Nz()
的原因。 allenbrowne.com/casu-12.html以上是关于使用 VBA 从主菜单打开一个表单,其中一个字段为空/空白的主要内容,如果未能解决你的问题,请参考以下文章