Чтобы объяснить ошибку, которую вы получаете: это возникает, когда вы пытаетесь присвоить значение Null
переменной, тип данных которой , а не a Variant
, согласно документации MS
Вариант - это специальный тип данных, который может содержать данные любого типа [...] Вариант также может содержать специальные значения Пусто, Ошибка, Ничего и Нуль .
Эта ошибка возникает в вашем коде, потому что функция DLookup
вернет Null
, когда ни одна запись в домене не соответствует указанному аргументу критерия, и может быть сведена к следующим двум строкам:
Dim UserLevel As String
UserLevel = DLookup("UserSecurity", "tblUser", "[UserLogin] = ' " & Me.txtLoginID.Value & "'")
Я подозреваю, что это вызвано пробелом в аргументе вашего критерия:
"[UserLogin] = ' " & Me.txtLoginID.Value & "'"
^--------------------------------- HERE
Что, вероятно, должно быть:
"[UserLogin] = '" & Me.txtLoginID.Value & "'"
Тем не менее, вы все равно можете учесть случай, когда ни одна из записей не соответствует критериям, что может быть выполнено несколькими способами.
Вы можете использовать функцию Nz
и затем проверить наличие пустой строки, например ::
UserLevel = Nz(DLookup("UserSecurity", "tblUser", "[UserLogin] = '" & Me.txtLoginID.Value & "'"), "")
Select Case UserLevel
Case "Admin": DoCmd.OpenForm "Employee"
Case "User" : DoCmd.OpenForm "CustomerForm"
Case Else : MsgBox "Invalid UserSecurity Value"
End Select
Или вы можете определить переменную UserLevel
как Variant
(следовательно, разрешить значение Null
) и проверить, является ли такая переменная Null
, используя функцию IsNull
:
Dim UserLevel As Variant ' Or just "Dim UserLevel" since Variant is the default type
UserLevel = DLookup("UserSecurity", "tblUser", "[UserLogin] = '" & Me.txtLoginID.Value & "'")
If IsNull(UserLevel) Then
MsgBox "Invalid UserSecurity Value"
ElseIf UserLevel = "Admin" Then
DoCmd.OpenForm "Employee"
Else
DoCmd.OpenForm "CustomerForm"
End If