我正在尝试使用环境功能,仅允许某些用户使用文档
这是我的问题:它只能使用一个用户名,而不能使用多个用户名。...
我知道嵌套循环可能是一种解决方案,但是我认为可能有一种更简单的方法。参考表也不成功
当前代码类似于
If ((IDnumber=“12345”) or (IDnumber=“1234”) or IDnumber=“123”)) then
Msgbox “approved”
Else: msgbox “denied”
答案 0 :(得分:5)
Select Case
是适合使用的语句,在这里:
Dim strMsg as String
Select Case IDnumber
Case 12345, 1234, 123
strMsg = "Approved"
Case Else
strMsg = "Denied"
End Select
Msgbox strMsg
如果变量IDnumber
是一个字符串(在这种情况下,变量名称选择不当!),则在列表中的每个项目周围使用引号:
Dim strMsg as String
Select Case IDnumber
Case "alpha", "bravo", "charlie"
strMsg = "Approved"
Case Else
strMsg = "Denied"
End Select
Msgbox strMsg
答案 1 :(得分:2)
有人可能会争论使用Select Case
(如Olly所建议的)还是If
是更好的解决方案。
但是,If
的语法为
If IDnumber = "12345" Or IDnumber = "1234" Or IDnumber = "123" Then
MsgBox "approved"
Else
MsgBox "denied"
End if
您的代码段中有几个错误:
"
else: MsgBox
是有效的,但不是很好的样式。 :
分隔两个语句,最好将其写成两行。无论如何,您需要结尾的End If
语句答案 2 :(得分:1)
可以将允许的用户名作为数组传递,然后检查当前用户名是否在该数组中。 valueInArray()
正是这样做的:
Sub CheckUser()
Dim userNames As Variant
userNames = Array("User1", "User2", "User3")
If valueInArray(Environ("UserName"), userNames) Then
Debug.Print "User Present"
Else
Debug.Print "User Not Present"
End If
End Sub
Public Function valueInArray(myValue As Variant, myArray As Variant) As Boolean
Dim cnt As Long
For cnt = LBound(myArray) To UBound(myArray)
If LCase(CStr(myValue)) = CStr(myArray(cnt)) Then
valueInArray = True
Exit Function
End If
Next cnt
End Function