具有多个用户的环境功能

时间:2018-10-30 15:52:08

标签: excel vba excel-vba

我正在尝试使用环境功能,仅允许某些用户使用文档

这是我的问题:它只能使用一个用户名,而不能使用多个用户名。...

我知道嵌套循环可能是一种解决方案,但是我认为可能有一种更简单的方法。参考表也不成功

当前代码类似于

If ((IDnumber=“12345”) or (IDnumber=“1234”) or IDnumber=“123”))  then 
Msgbox “approved”
Else: msgbox “denied”

3 个答案:

答案 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

您的代码段中有几个错误:

  • 不平衡的括号。就您而言,根本不需要任何括号。在VBA中(与许多其他语言不同),不需要将整个逻辑术语用括号括起来。另外,无需将单个或条件包装在括号中。
  • Marcucciboy2在评论中说,引号错误,请使用"
  • 语法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