Функция Environ с несколькими пользователями - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать функцию окружения, чтобы позволить только определенным пользователям использовать документ

Вот моя проблема: он работает с одним именем пользователя, а не с несколькими именами ....

Я знаю, что здесь могут быть вложенные циклы, но я думаю, что, возможно, есть более простой способ. Справочные таблицы также не работают успешно

Текущий код выглядит как

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

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Можно поспорить, если использовать Select Case (как предполагает Олли) или If - лучшее решение. Тем не менее, синтаксис для If будет

If IDnumber = "12345" Or IDnumber = "1234" Or IDnumber = "123" Then
    MsgBox "approved"
Else
    MsgBox "denied"
End if

В вашем фрагменте кода есть несколько ошибок:

  • несбалансированные скобки. В вашем случае вам не нужны круглые скобки. В VBA (в отличие от многих других языков) нет необходимости заключать весь логический термин в скобки. Кроме того, нет необходимости заключать одиночные условия или в скобки.
  • Как сказал в комментарии Marcucciboy2, неправильные символы кавычек, используйте "
  • Синтаксис else: MsgBox допустим, но не является хорошим стилем. : разделяет два оператора, лучше написать это в 2 строки. В любом случае, вам нужно окончание End If заявление
0 голосов
/ 30 октября 2018

Разрешенные имена пользователей можно передать как массив, а затем проверить, находится ли текущее имя пользователя в этом массиве. 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
0 голосов
/ 30 октября 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...