如下使用StrComp函数的VBA代码存在问题,请问错误出在哪里?
代码异常排查点
你给出的是Access VBA的身份验证判断代码,常见的异常触发原因如下:
If StrComp(Nz(TempVars!UserName), "Developer", vbBinaryCompare) = 0 And StrComp(Nz(TempVars!Password), "-Hget%$12l", vbBinaryCompare) = 0 Then
- TempVars变量未初始化
直接调用TempVars!UserName/TempVars!Password前如果没有用TempVars.Add方法添加对应变量并赋值,会直接抛出「找不到对应项目」的运行时错误。可以先加判断验证变量是否存在,再执行取值逻辑。 - And运算符无短路特性
VBA默认的And运算符不会短路,哪怕第一个用户名判断已经不成立,依然会执行后面的密码判断逻辑,如果密码变量存在异常就会触发报错。可以改成嵌套If判断,VBA 7及以上版本也可以换成AndAlso短路运算符规避这个问题。 - 类型不匹配问题
如果TempVars里存储的UserName/Password不是字符串类型(比如是数字、对象、空值以外的特殊类型),StrComp执行比较时会抛出类型不匹配错误。可以在取值时套一层CStr强制转字符串,修改后写法为StrComp(CStr(Nz(TempVars!UserName)), "Developer", vbBinaryCompare)。 - 大小写敏感不符合预期
你用了vbBinaryCompare二进制比较规则,大小写完全匹配才会判定相等,比如输入的用户名为全小写developer就会验证失败,如果需求是允许大小写不通用,把参数换成vbTextCompare即可。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

