С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297

Чек userName на равенство одному из разрешённых

21.06.2025, 09:08. Показов 1578. Ответов 13

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Имеется рабочий вариант проверки:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
Sub CheckName_1()
    Dim userName, usernames As Variant, accessAllowed As Boolean
    accessAllowed = False
    
    usernames = Array("Ooos", "Bob", "Dave", "Sally", "Amanda")  
    
    For Each userName In usernames
        If Environ("USERNAME") = userName Then
            accessAllowed = True
            Exit For
        End If
    Next
    
    If Not accessAllowed Then
         MsgBox "Имя пользователя не равно одному из разрешённых, Exit Sub"
    End If
     MsgBox "Имя пользователя равно одному из разрешённых, приветствую" 
End Sub
И не совсем рабочий (userName равно одному из элементов массива, но выходит сообщение о неравенстве):
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub CheckName_2() 
    Dim allowedNames As Variant, userName, anyOfAllowedNames As String     
    allowedNames = Array("Ooos", "Bob", "Dave", "Sally", "Amanda")    
    userName = Environ("USERNAME") 
    If userName <> anyOfAllowedNames Then 
        MsgBox "Имя пользователя не равно одному из разрешённых, Exit Sub"
        Exit Sub
    End If
     MsgBox "Имя пользователя равно одному из разрешённых, приветствую" 
End Sub
Ввиду компактности хотелось бы использовать CheckName_2, в чем причина ошибки и как её устранить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2025, 09:08
Ответы с готовыми решениями:

Добавление в презентацию чек-бокса с полем дата и время последнего активирования чек-бокса
Добрый день, уважаемые! Помогите пож-та, весь инет обыскал - не могу найти. Как вставить в...

Помогите с кодом cn.Open [connection string goes here], [username], [password]
Для открытия базы данных имеем следующий стандартный код cn.Open , , Какой конкретно вид имеет...

Почему программа на VBA запускается из C:\Documents and setting\UserName\
Здравствуйте, уважаемые форумчане! У меня странная (для меня) проблема, помогите, пожалуйста! Суть:...

13
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
21.06.2025, 10:03
Лучший ответ Сообщение было отмечено ooos как решение

Решение

Цитата Сообщение от ooos Посмотреть сообщение
И не совсем рабочий
Он не корректный, поскольку переменная anyOfAllowedNames нигде не присваивается. Можно не использовать массив.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub CheckName_3()
    Dim allowedNames$, userName$,
    allowedNames = " user, Ooos, Bob, Dave, Sally, Amanda"
    userName = " " & Environ("USERNAME") & ","
    If InStr(1, allowedNames, userName, vbTextCompare) = 0 Then
        MsgBox "Имя пользователя не равно одному из разрешённых, Exit Sub"
        Exit Sub
    End If
     MsgBox "Имя пользователя равно одному из разрешённых, приветствую"
End Sub
1
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
21.06.2025, 10:49  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Можно не использовать массив
testuser2, идеально. Спасибо за Решение.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,931
Записей в блоге: 4
21.06.2025, 11:20
Цитата Сообщение от testuser2 Посмотреть сообщение
allowedNames = " user, Ooos, Bob, Dave, Sally, Amanda"
    userName = " " & Environ("USERNAME") & ","
    If InStr(1, allowedNames, userName, vbTextCompare) = 0 Then
вряд ли ваш код найдет Amanda
0
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
21.06.2025, 11:22
shanemac51, спасибо за замечание, надо было добавить запятую в конце
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4140 / 2434 / 503
Регистрация: 13.12.2016
Сообщений: 8,277
Записей в блоге: 5
21.06.2025, 11:26
Цитата Сообщение от testuser2 Посмотреть сообщение
надо было добавить запятую в конце
или убрать вообще запятую из userName
0
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
21.06.2025, 11:33
Цитата Сообщение от АЕ Посмотреть сообщение
или убрать вообще запятую из
ладно убарать, мозги кипят, жаришка у нас просто нещадная, под 40 в тени
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4140 / 2434 / 503
Регистрация: 13.12.2016
Сообщений: 8,277
Записей в блоге: 5
21.06.2025, 11:38
Цитата Сообщение от testuser2 Посмотреть сообщение
под 40 в тени
у нас сейчас только в Сибири такая температура...
0
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
21.06.2025, 11:39
Цитата Сообщение от АЕ Посмотреть сообщение
у нас сейчас только в Сибири
я фактически там
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,931
Записей в блоге: 4
21.06.2025, 12:16
Visual Basic
1
If InStr(1, allowedNames & ",", userName, vbTextCompare) = 0 Then
1
 Аватар для Toxa33rus
3917 / 918 / 125
Регистрация: 16.04.2009
Сообщений: 1,944
08.07.2025, 14:44
Цитата Сообщение от АЕ Посмотреть сообщение
или убрать вообще запятую из userName
Тогда Aman будет найден, а не должен был.
1
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,429
08.07.2025, 16:26
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Тогда Aman будет найден, а не должен был.
Совершенно верно!

Цитата Сообщение от ooos Посмотреть сообщение
Ввиду компактности хотелось бы использовать CheckName_2
В VBA нет встроенной функции или оператора AnyOf.
Так что, при всей "некомпактности", - первый вариант надёжнее, и его можно "подсократить" используя универсальную функцию:
Вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub CheckName_1()
Dim sUserName As String, vArrNames, blnAllowed As Boolean
 
    
    vArrNames = Array("Ooos", "Bob", "Dave", "Sally", "Amanda")
    sUserName = Environ("USERNAME")
    blnAllowed = IsValueInArray(sUserName, vArrNames)
    
    If blnAllowed Then
        MsgBox "Приветствую!" & vbCrLf & "Имя пользователя " & _
            "равно одному из разрешённых.", vbInformation, "Зя! :)"
    Else
        MsgBox "Имя пользователя не равно ни " & _
            "одному из разрешённых", vbExclamation, "Низ-з-з-зя!"
    End If
    
End Sub
 
Public Function IsValueInArray(sVal As String, vArray) As Boolean
' Проверяет наличие <sVal> в массиве <vArray>
' ----------------------------------------------------------------------------------------/
Dim vArrVal
    For Each vArrVal In vArray
        If vArrVal = sVal Then
            IsValueInArray = True
            Exit For
        End If
    Next
End Function


Добавлено через 42 минуты
Цитата Сообщение от ooos Посмотреть сообщение
хотелось бы использовать CheckName_2
Костыль из серии "враг не пройдёт!" :
Экранируем случайные совпадения восклицательными знаками (например), в начале и в конце.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub CheckName03()
Dim sVal As String, blnAllowed As Boolean
Const sAllowedNames$ = "!Ooos!; !Bob!; !Dave!; !Sally!; !Amanda!"  ' точка с запятой для "красоты" только
 
    sVal = "*!" & Environ("USERNAME") & "!*"
    blnAllowed = (sAllowedNames Like sVal)
   
    If blnAllowed Then
        MsgBox "Приветствую!" & vbCrLf & "Имя пользователя " & _
            "равно одному из разрешённых.", vbInformation, "Зя! :)"
    Else
        MsgBox "Имя пользователя не равно ни " & _
            "одному из разрешённых", vbExclamation, "Низ-з-з-зя!"
    End If
    
End Sub
А можно и так:
Visual Basic
1
Const sAllowedNames$ = "!Ooos!Bob!Dave!Sally!Amanda!"
0
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
08.07.2025, 17:15
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Тогда Aman будет найден, а не должен был.
Збагойно
Visual Basic
1
2
    allowedNames = "|BabaGalya|Ooos|BFAngel|mamaProgr|AlHattab|SpaceShattl|"
    userName = "|" & Environ("USERNAME") & "|"
0
 Аватар для Angry Old Man
2998 / 740 / 311
Регистрация: 26.03.2022
Сообщений: 1,382
Записей в блоге: 1
11.07.2025, 06:25
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
Sub CheckName_1()
    Dim userName, usernames As Variant, accessAllowed As Boolean
    usernames = Array("Ooos", "Bob", "Dave", "Sally", "Amanda")
    
    accessAllowed = InStr(1, vbCr & Join(usernames, vbCr) & vbCr, vbCr & Environ("USERNAME") & vbCr, 1) > 0
    If Not accessAllowed Then
        MsgBox "Имя пользователя не равно одному из разрешённых": Exit Sub
    End If
    MsgBox "Имя пользователя равно одному из разрешённых, приветствую"
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
Sub CheckName_2()
    If Not accessAllowed(Array("Ooos", "Bob", "Dave", "Sally", "Amanda")) Then
        MsgBox "Имя пользователя не равно одному из разрешённых": Exit Sub
    End If
    MsgBox "Имя пользователя равно одному из разрешённых, приветствую"
End Sub
Function accessAllowed(usernames) As Boolean
    accessAllowed = InStr(1, vbCr & Join(usernames, vbCr) & vbCr, vbCr & Environ("USERNAME") & vbCr, 1) > 0
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2025, 06:25
Помогаю со студенческими работами здесь

Web queries with username and password
Добрый день, Помогите пожалуйста с проблемой. Мне нужно добавить в вба логин и пароль чтоб принял...

Переменная %username% для удаления папки
Здравствуйте. Есть ли у кого-нибудь готовый скрипт для удаления папки по %userprofile%? Пробовал...

Переменная %username% для удаления папки
Здравствуйте. Есть ли у кого-нибудь готовый скрипт для удаления папки по %userprofile%? Пробовал...

Работа с ККМ, или как напечатать чек?
Спасайте, уже неделю сижу над этой ККМ, ничего допетрить не могу. Дело осложняется отсутствием...

Преобразовать excel в PDF чтобы результат выглядел как кассовый чек (узко и длинно)
Доброго дня. Не могу сообразить как сделать так чтобы сохраненный вариант имел узкую форму чека. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru