无效访问VBA的使用无效

时间:2017-11-09 12:56:19

标签: vba null access-vba runtime-error

我试图为我正在处理的Access数据库编写登录系统的代码,除了这一个错误之外,一切都运行得很顺利。 我得到了

  

无效使用空

将登录详细信息放入我创建的登录表单后出现

错误,这样可以正常工作。问题在于应该将可查看的表单限制为" Read-Only"如果用户只有读取权限。我已经做了一些调查,看起来错误是由VBA尝试从具有NULL值的字段读取整数引起的,但是VBA不会告诉我确切的位置错误是,只有一行。

我发布了实际导航表单的代码,希望有人可以指出我的错误在哪里,所以我可以着手修复它。这是我的登录系统唯一的问题,它只是一个确定问题实际位置的案例,因此我可以实现所需的任何更改,因为我感觉它在识别实际Userlevel的位置时遇到了问题价值来自。

Option Compare Database
Option Explicit

Private Sub Form_Load()

Dim UserLogin As String

Dim UserLevel As Integer

UserLogin = Environ("UserName")
Me.TxtLogin = UserLogin
UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & Me.TxtLogin 
& "'")
If UserLevel = 3 Then
    Me.AllowAdditions = False
    Me.AllowDeletions = False
    Me.AllowEdits = False
End If
End Sub

2 个答案:

答案 0 :(得分:4)

您没有提到错误发生的位置。我想这是在线

UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & Me.TxtLogin & "'")

您应该Dim UserLevel as Variant,因为Dlookup可能会返回Null

或者,您可以离开UserLevel as Integer并使用:

UserLevel = Nz(DLookup("[UserType]", "TblUser", "[UserLogin] = " & Me.TxtLogin & "'"),0)

将可能的Null变为0。

答案 1 :(得分:0)

使用NZ()函数来转义空值。

Nz(Value, ValueIfNull )
UserLevel = DLookup("[UserType]", "TblUser", "[UserLogin] = '" & NZ(Me.TxtLogin,"") & "'")

参考:Application.Nz Method (Access)

@PatrickHonorez提出了一个很好的观点。但您也可以使用NZ函数来包装DLookup

UserLevel = NZ(DLookup("[UserType]", "TblUser", "[UserLogin] = '" & NZ(Me.TxtLogin,"") & "'"),"")