如何修复MS Access VBA中"Type mismatch"运行时错误13
错误产生原因
- 核心问题是
IsNull()函数的参数写法错误:你将逻辑运算符Or写在了IsNull的括号内部,VBA执行代码时会优先计算括号内的Me.txtUserId Or Me.txtPassword表达式,尝试对两个控件的值做布尔或运算。 - 当文本框为空时,控件值为
Null,而Null无法参与布尔逻辑运算,会直接触发Run-Time error '13' Type mismatch类型不匹配错误,代码根本不会执行到IsNull的判断逻辑。 - 额外逻辑问题:就算该写法不报错,也无法实现“两个文本框都为空时触发提示”的需求,
IsNull仅能判断单个输入值是否为空,无法直接对带逻辑运算符的多控件组合表达式生效。
修复方法
- 分别对两个文本框控件单独做
IsNull空值判断,再根据实际校验需求用逻辑运算符连接判断条件:- 若要匹配你最初的需求「两个文本框都为空时弹出提示」,使用
And连接两个空值判断 - 登录场景更通用的校验逻辑是「任意一个文本框为空就弹出提示」,此时用
Or连接即可
- 若要匹配你最初的需求「两个文本框都为空时弹出提示」,使用
- 修复后的可运行代码如下(以两个都为空触发提示为例):
If IsNull(Me.txtUserId) And IsNull(Me.txtPassword) Then MsgBox "insert User ID and your Password", vbInformation, "Caution" Me.txtUserId.SetFocus Exit Sub End If
注:由于你已经将两个文本框设置为数字格式,空状态下控件值为
Null,直接使用IsNull判断空值是正确写法,不需要额外用空字符串""做匹配判断。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

