Всем доброе утро. Друзья, помогите пожалуйста с оптимизацией кода. В наличии имеется UserForm для входа в файл В ней происходит банальная проверка двух совпадений Логин-Пароль, все работает все классно, но мне хотелось бы его немного улучшить. вот сам кусок кода: [vba]
Код
If c = "М1" And t = "127" Then [a1] = 1 ElseIf c = "М2" And t = "114" Then [a1] = 1 ElseIf c = "М3" And t = "178" Then [a1] = 1 ElseIf c = "М4" And t = "155" Then [a1] = 1 ElseIf c = "М5" And t = "126" Then [a1] = 1 ElseIf c = "М6" And t = "111" Then [a1] = 1 ElseIf c = "М7" And t = "180" Then [a1] = 1 '''''''''''''''' ПРЕМИУМ ДОСТУП '''''''''''''''' ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then [a1] = 2 Else [a1] = 3 End If
[/vba]
Как можно организовать тоже самое, но существенно сократив код, поскольку действий всего лишь 3, при выполнение первых 7 условий происходит одно и тоже действие - запись в ячейку а1 числа 1, можно делать и так: [vba]
Код
If (c = "М1" And t = "127") or (c = "М2" And t = "114") or (c = "М3" And t = "178") or (c = "М4" And t = "155") or (c = "М5" And t = "126") or (c = "М6" And t = "111") or (c = "М7" And t = "180") Then [a1] = 1 '''''''''''''''' ПРЕМИУМ ДОСТУП '''''''''''''''' ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then [a1] = 2 Else [a1] = 3 End If
[/vba]
но подозреваю что есть более красивое решение... Наставьте на путь истинный))) Заранее благодарен
Всем доброе утро. Друзья, помогите пожалуйста с оптимизацией кода. В наличии имеется UserForm для входа в файл В ней происходит банальная проверка двух совпадений Логин-Пароль, все работает все классно, но мне хотелось бы его немного улучшить. вот сам кусок кода: [vba]
Код
If c = "М1" And t = "127" Then [a1] = 1 ElseIf c = "М2" And t = "114" Then [a1] = 1 ElseIf c = "М3" And t = "178" Then [a1] = 1 ElseIf c = "М4" And t = "155" Then [a1] = 1 ElseIf c = "М5" And t = "126" Then [a1] = 1 ElseIf c = "М6" And t = "111" Then [a1] = 1 ElseIf c = "М7" And t = "180" Then [a1] = 1 '''''''''''''''' ПРЕМИУМ ДОСТУП '''''''''''''''' ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then [a1] = 2 Else [a1] = 3 End If
[/vba]
Как можно организовать тоже самое, но существенно сократив код, поскольку действий всего лишь 3, при выполнение первых 7 условий происходит одно и тоже действие - запись в ячейку а1 числа 1, можно делать и так: [vba]
Код
If (c = "М1" And t = "127") or (c = "М2" And t = "114") or (c = "М3" And t = "178") or (c = "М4" And t = "155") or (c = "М5" And t = "126") or (c = "М6" And t = "111") or (c = "М7" And t = "180") Then [a1] = 1 '''''''''''''''' ПРЕМИУМ ДОСТУП '''''''''''''''' ElseIf (c = "М8" And t = "138") Or (c = "М9" And t = "443") Or (c = "М10" And t = "198") Then [a1] = 2 Else [a1] = 3 End If
[/vba]
но подозреваю что есть более красивое решение... Наставьте на путь истинный))) Заранее благодаренDJ_Marker_MC
Саня, благодарю. именно то что хотел, сам пробовал через Select Case, но не додумался как правильно. _Boroda_, Саша, по удобочитаемости, больше понравился все же Select Case
Саня, благодарю. именно то что хотел, сам пробовал через Select Case, но не додумался как правильно. _Boroda_, Саша, по удобочитаемости, больше понравился все же Select CaseDJ_Marker_MC
Предложенные варианты хороши, но они сильно "программные". То есть, при необходимости менять права и доступы - надо будет вскрывать код, вспоминать, где в нём что. Хочу предложить более гибкий вариант: а что, если сделать совсем скрытый лист с двумя столбцами? В одном логин, в другом пароль. С помощью .Find или функции листа VLOOKUP ищем строку с указанным пользователем логином и проверяем, совпадает ли пароль на этой строке с введённым. Зона поиска может быть расширяемой автоматически. С таким вариантом администрирование будет куда проще и не будет возможной потери точности из-за сцепки, когда М1905 может быть связкой М19 и 05 или М1 и 905.
P.S. По Select Case у нас есть СТАТЬЯ, может чего ещё там интересного найдёшь =)
DJ_Marker_MC, привет!
Предложенные варианты хороши, но они сильно "программные". То есть, при необходимости менять права и доступы - надо будет вскрывать код, вспоминать, где в нём что. Хочу предложить более гибкий вариант: а что, если сделать совсем скрытый лист с двумя столбцами? В одном логин, в другом пароль. С помощью .Find или функции листа VLOOKUP ищем строку с указанным пользователем логином и проверяем, совпадает ли пароль на этой строке с введённым. Зона поиска может быть расширяемой автоматически. С таким вариантом администрирование будет куда проще и не будет возможной потери точности из-за сцепки, когда М1905 может быть связкой М19 и 05 или М1 и 905.
P.S. По Select Case у нас есть СТАТЬЯ, может чего ещё там интересного найдёшь =)Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Rioran, Идея хорошая и изначально (год назад когда был создан этот файл) я так и хотел сделать, тем более супер скрытый лист с перечнем пользователей к которому и привязан Combobox - существует, но знаний тогда не хватило это реализовать. А сейчас особо не хотел заморачиваться, тем более пользователи крайне редко меняются. Но идея отличная и стоит ей заняться, если делать так, то можно и углубится дав возможность юзеру самому установить/сменить пароль.... Блин))) зачем ты мне про это напомнил))) придется делать... ато в голове сразу извращенные фантази начали мелькать что еще можно добавить. А насчет сцепки все решается очень легко поставив между логин и пароль разделитель, например | (вертикальная линия)
Rioran, Идея хорошая и изначально (год назад когда был создан этот файл) я так и хотел сделать, тем более супер скрытый лист с перечнем пользователей к которому и привязан Combobox - существует, но знаний тогда не хватило это реализовать. А сейчас особо не хотел заморачиваться, тем более пользователи крайне редко меняются. Но идея отличная и стоит ей заняться, если делать так, то можно и углубится дав возможность юзеру самому установить/сменить пароль.... Блин))) зачем ты мне про это напомнил))) придется делать... ато в голове сразу извращенные фантази начали мелькать что еще можно добавить. А насчет сцепки все решается очень легко поставив между логин и пароль разделитель, например | (вертикальная линия)DJ_Marker_MC