Авторизация в excel файле

Авторизация в Excel на VBA: создание формы, написание программного кода, особенности реализации.

В этой статье я расскажу вам о создании формы авторизации в Excel с помощью VBA.

Что же представляет из себя авторизация в Excel? Это форма, то есть окно, с запросом ввода логина и пароля, при успешном вводе которых, пользователю будут открываться различные листы документа, в зависимости от группы доступа пользователя. Точно также, помимо открытия листов, можно будет выставить ограничения на действия в Excel: запрет форматирования ячеек, удаление строк, столбцов, использование фильтров, объектов, сценариев и так далее. Но обо всем по порядку.

Авторизация в Excel: основной алгоритм работы

Для начала, необходимо разработать алгоритм, по которому мы будем работать, и выглядеть он будет примерно так:

Авторизация на VBA: алгоритмИтак, поехали!

Авторизация в Excel: макет документа

Наш рабочий документ будет состоять из четырех листов:

  1. Лист с приветствием — единственный лист, который будет отображаться всем пользователям до авторизации
  2. Лист с дашбордом (визуализированным отчетом) — графики, диаграммы/гистограммы — изначально со свойством VeryHidden*
  3. Лист с данными — источник расчетов для дашборда  — изначально со свойством VeryHidden
  4. Служебный/технический лист — для хранения логинов, паролей и служебной и вспомогательной информации  — также, со свойством VeryHidden

*VeryHidden— свойство листа, при котором сам лист скрыт и включить его отображение можно только через использование режима разработчика. Для выбора данного свойства, необходимо в Excel зайти в меню «Разработчик» — «Visual Basic». Далее, необходимо выбрать нужный нам лист и в его свойствах («Properties») найти свойство Visible и установить в «2 — xlSheetVeryHidden».

Авторизация на VBA: свойство VeryHiddenПосле этого лист станет «очень скрытым». Отменить свойство VeryHidden можно точно так же через режим разработчика, либо используя необходимый нам макрос, о котором я напишу чуть дальше.

Авторизация в Excel: группы доступа

После создания макета документа, нам необходимо разработать несколько групп доступа и распределить и ограничить для них права. Предположим, что таких групп будет три:

  1. Администраторы (Admin): доступны все листы , в том числе служебный, а также отсутствуют какие-либо ограничения.
  2. Руководители и ответственные за данные (Head): доступны 2 рабочих листа + стоит пароль на изменение структуры книги.
  3. Рядовые сотрудники компании (Worker): доступен только 1 рабочий лист с дашбордом + стоит пароль на изменение структуры книги.
Авторизация в Excel: разработка макета формы

С этим пунктом не должно возникнуть никаких проблем. Элементов на форме авторизации должно быть не так уж и много:

  • Поле ввода для логина
  • Поле ввода для пароля
  • Кнопка «Авторизация» (проверка логина и пароля)
  • Различные подписи на форме
  • По желанию: кнопка закрытия формы, кнопка восстановления пароля, логотипы, справка и все, что душе угодно

Для тех, кто не знает, как создавать формы в VBA: нужно зайти в меню «Разработчик» — «Visual Basic», нажать правой кнопкой по нашему проекту (VBAProject Название_Файла.xlsx), затем Insert — UserForm. Создается форма с названием UserForm1, на которой мы и будем размещать все наши объекты с помощью меню «ToolBox».

Если быстро набросать элементы, которые мы перечислили, должно получиться что-то вроде этого:

Авторизация на VBA: форма авторизации

После добавления элементов, поменял их стандартные названия:

«UserForm1» переименовал в «Authorization».
«TextBox1» переименовал в «TextBox_Login».
«TextBox2» переименовал в «TextBox_Pass». 

Также, в свойствах «TextBox_Pass», мы находим свойство «PasswordChar» и вводим любой символ, который мы хотим видеть вместо вводимых символов пароля — чаще всего используется символ «*».

Ничего лишнего, пока что все просто. Переходим далее.

Подготовка служебного листа

В моем примере, служебный лист будет содержать список логинов, паролей, а также соответствующую логину группу доступа. Чтобы немного «усложнить» потенциальный взлом (хотя надо понимать, что взломать Excel продвинутому пользователю не составит никакого труда), пароли на листе мы будем хранить в захешированном виде. Подробнее о хешировании можно прочитать на Википедии, но в вкратце — это преобразование данных в строку фиксированной длины, состоящей из цифр и букв с помощью определенных математических алгоритмов. О том, как мы будем хешировать пароли в Excel, я расскажу далее.

Итак, для начала, содержимое служебного листа будет выглядеть вот так:

Авторизация на VBA: служебный лист

Авторизация в Excel: особенности и написание программного кода на VBA

Данные пункты тесно взаимосвязаны между собой, поэтому я их объединил в один большой. Здесь мы будем писать программный код для всего нашего файла: как для формы, так и для некоторых событий.

Для начала, мы напишем код, который будет отображать различные листы в зависимости от роли пользователя после авторизации. Макрос user_group мы делаем приватным и вписывать его будем не в отдельный модуль, а в нашу готовую форму Authorization. Аргументом для макроса является переменная X, которая будет содержать название группы доступа в виде текстовой строки String:

Private Sub user_group(ByVal X As String)
Dim Sht As Worksheet 'создаем переменную типа Рабочий Лист

ActiveWorkbook.Unprotect "112" 'Снимаем защиту структуры книги паролем

For Each Sht In ThisWorkbook.Sheets 'перебираем все листы книги
    If (X = "Admin") Then Sht.Visible = -xlSheetVisible 'если роль Admin - каждый лист будет видимый
    If (X = "Head") And (Sht.Name <> "Settings") Then Sht.Visible = -xlSheetVisible 'если роль Head - видны все, кроме Settings
    If (X = "Worker") And (Sht.Name = "Dashboard") Then Sht.Visible = -xlSheetVisible 'если роль Worker - виден только Dashboard
Next Sht

'если роль либо Head, либо Worker - ставим защиту на структуру книги с паролем "112"
If (X = "Head") Or (X = "Worker") Then ActiveWorkbook.Protect Password:="112", Structure:=True, Windows:=False

End Sub

Хочу обратить внимание на то, что у нашего файла будет стоять «защита структуры книги» с паролем «112», т.е. пользователь не сможет создавать, удалять и переименовывать листы нашего документа. И, чтобы изменить видимость листов, необходимо сначала снять эту защиту программно, а затем, в зависимости от роли пользователя, поставить обратно, что мы и делаем в нашем коде.

Далее, код для кнопки «Авторизация». При нажатии на данную кнопку, запускается несколько проверок:

  • Проверка полей логина и пароля заполнение: если одно из них не заполнено — выводится уведомление, выполнение макроса прекращается.
  • Проверка переменной Check: данная переменная хранит значение «некорректных» попыток входа. Ее необходимо объявить в основном модуле книги: Public check As Integer. Если данная переменная больше 3х — доступ к авторизации в текущей сессии блокируется.
  • Поиск и проверка логина на наличие на листе «Settings». Если логин найден — введенный пароль хешируется и сравнивается с хранимым хешем на соответствующей строке логина:
    • Если все корректно — запускается макрос User_Group, который открывает доступ к листам в зависимости от группы доступа, соответствующей логину.
    • Если данные некорректные — пользователь предупреждается об этом, а также наращивается счетчик некорректных попыток авторизации.
  • В оставшемся случае (все введено, но пользователь с таким логином не найден), пользователь также уведомляется.
Private Sub CommandButton1_Click()
If (TextBox_Login = "") Or (TextBox_Pass = "") Then 'предупреждение на заполнение полей логина/пароля
    MsgBox "Не введен логин или пароль!", vbInformation + vbOKOnly, "Внимание!"
    Exit Sub
End If

If (check > 3) Then 'проверка на количество паролей, введенных некорректно
    MsgBox "Вы ввели неверный пароль больше трех раз. Доступ к файлу заблокирован!", vbCritical + vbOKOnly, "Внимание"
    Exit Sub
End If

LastRow = Sheets("Settings").Cells(Rows.Count, 1).End(xlUp).Row 'проверка списка логинов
For i = 2 To LastRow
    If TextBox_Login = Sheets("Settings").Cells(i, 1) Then 'если логин найден
        If Sheets("Settings").Cells(i, 2) = GetHash(TextBox_Pass.Value) Then 'пароль хешируется и сравнивается с хранимым хешем
            user_group Sheets("Settings").Cells(i, 3).Value 'и если все ок - запускается макрос разграничения групп доступа
            Unload Authorization
            Exit Sub
        Else 'в противном случае - уведомление о неправильном пароле
            MsgBox "Неверный пароль", vbCritical + vbOKOnly, "Внимание!"
            check = check + 1 'также наращивается счетчик неправильных паролей
            Exit Sub
        End If
    End If
Next i

'в оставшемся случае - уведомления о несуществующем логине.
MsgBox "Пользователя с данным логином не существует.", vbInformation + vbOKOnly, "Внимание!"

End Sub

В макросе CommandButton1_Click используется функция GetHash (строка 15), которая преобразует входящие данные в хеш. Данная функция взята с сайта ExcelVba.ru, за что выражаю им огромную благодарность. Код необходимо вставить в главный модуль книги:

Function GetHash(ByVal txt$) As String
    Dim oUTF8, oMD5, abyt, i&, k&, hi&, lo&, chHi$, chLo$
    Set oUTF8 = CreateObject("System.Text.UTF8Encoding")
    Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    abyt = oMD5.ComputeHash_2(oUTF8.GetBytes_4(txt$))
    For i = 1 To LenB(abyt)
        k = AscB(MidB(abyt, i, 1))
        lo = k Mod 16: hi = (k - lo) / 16
        If hi > 9 Then chHi = Chr(Asc("a") + hi - 10) Else chHi = Chr(Asc("0") + hi)
        If lo > 9 Then chLo = Chr(Asc("a") + lo - 10) Else chLo = Chr(Asc("0") + lo)
        GetHash = GetHash & chHi & chLo
    Next
    Set oUTF8 = Nothing: Set oMD5 = Nothing
End Function

Основной код написан, теперь переходим к более мелким.

Макрос, который запускает форму авторизации (можно установить на кнопку на главном листе «Main»):

Sub Authorization_Start()
    Authorization.Show
End Sub

Также, макрос можно использовать при событии «Open» — при открытии книги:

Private Sub Workbook_Open()
    Authorization_Start
End Sub

Стоит отметить, что у большинства пользователей запуск макросов по умолчанию отключен, именно поэтому на главном листе Main необходимо сделать что-то вроде «памятки» со справочной информацией о том, как активировать работу макросов.

Макрос для закрытия книги.

При закрытии книги, нам нужно снять защиту со структуры книги, затем скрыть все листы (кроме листа «Main»), а затем снова вернуть защиту структуры книги с паролем «112» (можно установить на какую-либо кнопку):

Sub close_book()
Dim Sht As Worksheet
ActiveWorkbook.Unprotect "112"
For Each Sht In ThisWorkbook.Sheets
    If Sht.Name <> "Main" Then Sht.Visible = xlSheetVeryHidden
Next Sht
ActiveWorkbook.Protect Password:="112", Structure:=True, Windows:=False
End Sub

Да, данный макрос можно использовать при событии «BeforeClose» — перед закрытием книги. Однако, может возникнуть несколько проблем:

  • Если пользователь сохраняется вручную до закрытия документа, закрывает документ,  а затем при автоматическом запросе о сохранении нажимает «не сохранять». В таком случае, при новом запуске документа, скрытые листы будут видны всем. Да, вероятность такого события крайне мала, но она все-таки есть.
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        close_book
    End Sub
  • Если добавим принудительное сохранение после скрытия всех листов, перед окончательным закрытием файла (как на примере ниже). В таком случае, если пользователь очень сильно ошибется с данными в файле и нажмет на крестик, чтобы начать все с нуля — файл все равно сохранится и восстановить исходные данные не получится.
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Application.ScreenUpdating = False
        close_book
        ThisWorkbook.Save
    End Sub

Поэтому, чтобы избежать такой ситуации, я хочу предложить более радикальный, менее удобный вариант, который, однако, сведет вышеперечисленные потенциальные проблемы к минимуму: помимо выполнения макроса close_book перед каждым закрытием книги с помощью события «BeforeClose» (как на первом проблемном варианте), мы будем выполнять его и перед каждым ручным сохранением файла с помощью события BeforeSave:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    close_book
End Sub

Осталось только сделать памятку по включению макросов на главном листе документа, а также выполнить важный шаг, без которого все наши проделанные действия не имеют смысла — поставить пароль на проект VBA: Меню «Разработчик» — «Visual Basic» — «Tools» — «VBAProject — Project Properties» — Вкладка «Protection» — поставить галочку «Lock project for viewing» и ввести пароль и нажать «Ок».

Авторизация на VBA: защита проекта

Сохраняем файл в формате «.xlsb» или «.xlsm» и все, наша «Авторизация на VBA» готова. Помимо этого, можно защитить проект еще сильнее — о способах защиты написано моей отдельной статье.

Также, по желанию, мы можем сделать отдельную форму для администраторов, для добавления новых пользователей на лист «Settings», либо форму для восстановления пароля по какому-либо ключевому слову, но в данном примере такие функции мы реализовывать не будем.

Назначение формы авторизации

Форма авторизации - ввод логина и пароля
Форма авторизации - управление учётными записями
Форма авторизации - добавление и изменение аккаунтов
 

Форма авторизации предназначена для разграничения прав пользователей при работе с документами Office, содержащими макросы.

При помощи данного инструмента вы можете реализовать различные пользовательские интерфейсы для сотрудников различных групп доступа, а также разграничить права отдельных пользователей программы.

Программа допускает создание неограниченного числа пользователей, каждый из которых принадлежит к одной из следующих групп:
пользователь, уверенный пользователь, администратор, разработчик.
(количество групп при желании можно легко увеличить до 9999)

При первом запуске формы (или после того, как вы залогинитесь под правами администратора) становится доступной кнопка добавления и редактирования списка учётных записей.

Для вызова формы авторизации используется функция GetNewAL, которая возвращает выбранный пользователем уровень доступа.

Текущий уровень доступа хранится в глобальной переменной AL, таким образом, в любом месте кода вы можете использовать соответствующие проверки:

Sub Main()
    If AL = AL_DEVELOPER Then Exit Sub    ' этот макрос не надо запускать под учёткой разработчика
    
    If AL < AL_ADMINISTRATOR Then    ' пользователь, или уверенный пользователь
        
        MsgBox "У вас недостаточно прав для выполнения этого действия", vbExclamation, "Недостаточно прав"
 
        ' предоставляем пользователю возможность ввести учётные данные администратора
        If GetNewAL >= AL_ADMINISTRATOR Then
            ' ваш код (пользователь залогинился как "администратор")
        End If
 
    End If
End Sub

Пароль на проект VBA: 1 (единица)

 

Предположим, у нас имеется страница сайта с таблицей и имеет структуру mysite.cru/page_id=322.
И нам необходимо собрать табличные данные из этой таблицы в Excel, что мы делаем? — создаем запрос с источником «Из интернета»
Все бы ничего, но на сайте необходимо авторизоваться, посредством формы.
Соответственно, вопрос: как это сделать внутри Excel?
Возможно ли открыть «браузер» excel’я и авторизоваться там, и как это вообще работает. Потому что, как-никак фреймы в программе присутствуют.

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

reflexioluce, у Вас вопрос про «внутренний браузер» или как авторизоваться на сайте?

 

 как авторизоваться на сайте внутри Excel

 

Dark1589

Пользователь

Сообщений: 487
Регистрация: 22.11.2017

 

Нет, уже пробовал. Да и странно если бы это работало, так как на сайтах используются разные механизмы авторизации

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

#6

02.08.2019 15:28:50

Цитата
reflexioluce написал:
на сайтах используются разные механизмы авторизации

Отлично, что вы это знаете, и какой механизм используется на том, к которому желаете подключиться?

Вот горшок пустой, он предмет простой…

 

PooHkrd, необходимо заполнить форму и нажать кнопку. Форма — HTML-тег form, и вроде бы как передает через input type

 

Alemox

Пользователь

Сообщений: 2183
Регистрация: 25.02.2013

Смотрите запросы и ответы при регистрации.
Запросы GET и POST.
В хроме через F12 можно посмотреть, но не всё, зависит от сайта.

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

Alemox, Допустим, а как реализовать ответ на эти запросы в Excel 2016?

 

reflexioluce

Пользователь

Сообщений: 6
Регистрация: 02.08.2019

#10

13.08.2019 16:32:50

Выбираем отдельный запрос «Из интернета»(Веб-запрос), который находится во вкладке «Данные», проходим авторизацию через полумертвый IE, и большинство запросов будет проходить нормально

Изменено: reflexioluce13.08.2019 16:35:14

Excel VBA Login Form

It is possible to create a login-based user form in Excel VBA with all the login ID drop-down lists, and it will share the password separately. However, at some point, you must have an idea of creating a password-based login user form, which requires the user to pick their user ID and enter the password to access the required worksheet.

Table of contents
  • Excel VBA Login Form
    • How to Create a Login User Form?
      • Step 1: Insert User Form
      • Step 2: Design Userform
      • Step 3: Code
    • Things to Remember
    • Recommended Articles

This article will show you how to create a login UserForm using Excel VBA.

VBA-Login

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Login Form (wallstreetmojo.com)

How to Create a Login User Form?

For example, assume you have region-wise sales numbers in different worksheets. We have four different zone names, and each zone worksheet has its related data only. Now, the idea is to create a login form where the “East” zone sales head should see only “East” zone data. Not any other zones, but as an admin, you should see all the zones’ worksheets.

You can download this VBA Login Excel Template here – VBA Login Excel Template

First, we need to insert a sheet name called “Admin.” Then, in this admin sheet, we need to create “Login ID” and “Password” credentials.

Admin Sheet

We have named the zone and password the same. You can change this later. We have created the name rangeName range in Excel is a name given to a range for the future reference. To name a range, first select the range of data and then insert a table to the range, then put a name to the range from the name box on the left-hand side of the window.read more for zone names as “ZoneList.” This “Name Manager” will be used later on this login UserForm.

Name Range

When the user opens the file, they should see one dummy sheet in the background, so create a new sheet and name it the “Dummy” sheet.

Add Dummy Sheet

Using these worksheets, we will create a login UserForm.

Step 1: Insert User Form

Press ALT + F11 key to open the VBA EditorThe Visual Basic for Applications Editor is a scripting interface. These scripts are primarily responsible for the creation and execution of macros in Microsoft software.read more window.

Open VBA Editor

  • From the “Insert” tab, insert “UserForm.”

Insert Userform

  • It will create a new UserForm like the below one.

Userform

  • Press the F4 key to see the “Properties” window. From this window, change the name of the UserForm to “LogInUF.”

vba log in - Change Userform Name

  • Similarly, using this properties window, we can play with the properties of the UserForm. We have made some of the property changes. We can refer to the below properties window to apply changes to the properties of the UserForm.

vba log in - Userform Properties

  • Now, my UserForm looks like this.

vba log in - Userform Edited

Step 2: Design Userform

  • From the toolbox of the UserForm, insert two label boxes and enter the text, as shown below.

vba log in - Add Labels

  • From the toolbox, insert “Combo Box.”

vba log in - Add ComboBox

  • For this ComboBox excelCombo Box in Excel is a type of data validation tool that can create a dropdown list for the user to select from the pre-determined list. It is a form control which is available in the insert tab of the developer’s tab.read more, we need to get the zone names from the worksheet “Admin Sheet,” so from the properties window of the “Combo Box,” first give a name to this combo box as “Zone_List_ComboBox” under the “Name” property.

vba log in - Change ComboBox Name

  • From the “RowSource” property of the combo box, enter the name given to the zone list in the “Admin Sheet.”

Excel vba log in - ComboBox Add Row Source

  • Now, our ComboBox should show zone names in its dropdown list in excelA drop-down list in excel is a pre-defined list of inputs that allows users to select an option.read more.

Excel vba log in - ComboBox Drop-Down List

  • For “Enter Your Password,” we need to insert a “Text Box” from the toolbox.

Excel vba log in - Insert TextBox

  • For this “Text Box,” we need to change the “Name” property and change it as “Password_TB.”

vba log in - Change TextBox Name

Now in the coding for the VBAVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more login form, “Combo Box” will be referred to by the name “Zone_List_ComboBox,” and “Text Box” will be referred to by the name “Password_TB.”

  • Insert two “CommandButton” and enter the text as “Log In” and “Log Out.”

vba log in - Add CommandButton

For the “Log In” command button, change the name property to “Login_CommandButton,” and for the “Log Out” command button, change the name property to “LogOut_CommandButton.”

Step 3: Code

We completed the VBA login UserForm design part. Next, it is time to write the code to create a login-based UserForm in Excel VBA.

  • Double click on the “Log In” Command Button. It will open a blank sub procedure like the below one.

vba log in - Log in Button

Inside this procedure, we need to write the code about what should happen if we press the “Log In” button.

We have already written the code. We can copy and paste the code from below inside the above procedure.

Code:

Private Sub Login_CommandButton_Click()

If Zone_List_ComboBox.Value = "" Then
MsgBox "Zone Cannot be Blank!!!", vbInformation, "Zone Name"
Exit Sub
End If

If Password_TB.Value = "" Then
MsgBox "Password Cannot be Blank!!!", vbInformation, "Password"
Exit Sub
End If

If Zone_List_ComboBox.Value = "Admin" And Password_TB.Value = "Admin" Then
Unload Me

Dim Ws As Worksheet

For Each Ws In ActiveWorkbook.Worksheets
Ws.Visible = xlSheetVisible
Next Ws
Sheets("Admin").Select
Else

Dim ZoneName As String
Dim Password As Variant

ZoneName = Zone_List_ComboBox.Value
Password = Application.WorksheetFunction.VLookup(ZoneName, Sheets("Admin").Range("A:B"), 2, 0)

If Password <> Password_TB.Value Then
MsgBox "Password is not matching", vbInformation, "Wrong Password"
Exit Sub
End If

If Password = Password_TB.Value Then
Unload Me
Sheets(ZoneName).Visible = True
Sheets(ZoneName).Select
ActiveSheet.Range("A1").Select
End If
End If

End Sub

Similarly, double click on the “Log Out” command button and enter the below code.

Code:

Private Sub LogOut_CommandButton_Click()

        ThisWorkbook.Save
        ThisWorkbook.Close

End Sub

vba log in - Log out Button

Now, double click on “UserForm” (not on any of the buttons inserted) and add the below code.

Code:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' Prevents use of the Close button
     If CloseMode = vbFormControlMenu Then
          MsgBox "Clicking the Close button does not work."
          Cancel = True
     End If
End Sub

Log in - Userform Code

  • Now, double-click on the “ThisWorkbookVBA ThisWorkbook refers to the workbook on which the users currently write the code to execute all of the tasks in the current workbook. In this, it doesn’t matter which workbook is active and only requires the reference to the workbook, where the users write the code.read more” icon. It will open up below the blank code field.

Thisworkbook

Now add the below code in this blank field.

Code:

Private Sub Workbook_Open()

     Dim Ws As Worksheet

     Application.DisplayAlerts = False
     Application.ScreenUpdating = False

     For Each Ws In ActiveWorkbook.Worksheets

     If Ws.Name <> "Dummy" Then
     Ws.Visible = xlSheetVeryHidden
     End If
     Next Ws

     LogInUF.Show

End Sub

Log in - Thisworkbook Code

  • We have completed the coding part of the form. Next, save the workbook as a “Macro-Enabled” workbook and reopen the workbook. Upon reopening the workbook, we should see the below window.

vba login form

  • We must choose the respective zone name from this UserForm and enter the associated password. For example, we will choose the “East” zone from the dropdown and enter the password.

vba login form for East

  • If we click “Log In,” we can see only the “East” zone worksheet.

VBA Login East Zone Data

Similarly, if we log in with “Admin,” we can access all the worksheets.

VBA Login with Admin

Like this, we can create login-based password-protected worksheet access.

Things to Remember

  • It would help if we used the same names given to the UserForm, text box, command button, and combo box in the coding.
  • We can change the zone name and password according to your wish.

Recommended Articles

This article has been a guide to VBA Login. Here, we discuss how to create a login form in Excel VBA with the help of an example and a downloadable Excel sheet. You can learn more about VBA from the following articles: –

  • VBA Object Required
  • ENVIRON Function in VBA
  • VBA Close UserForm
  • Excel Forms for Data Entry

Login Form is one of the secure method to access the authorized pages, application and contents in any of the platform.

Suppose, you have developed any application or complex excel spreadsheet and you want to apply restriction so that only authorized users can access your application then this feature will be very useful.

In this post, we are going to learn how to create a login page for a spreadsheet or Excel based automated application.

Here, I am going to utilize and existing Data Entry Form. In this data entry form, we will add the feature of Login form so that whenever user will open this application, it will ask User Credentials to proceed with data entry job. If User will provide the correct login and password then it will open the application for further usage otherwise, it will get terminated.

Data Entry Form

Data Entry Form

Let us move to Visual Basic of Application window. To do that just click on Developer Tab then click on Visual Basic icon available in code group.

Macro

Open Visual Basic window

Let us insert a user form to design Login Window. To insert the form, just click on Insert Menu then click on user Form.

Insert a Blank Form

Design the form as per below image.

Login Form

Set the properties of all the controls available in this form. Please follow the below given properties.

Properties 2

Properties

Now, we have done with designing part. Let’s start coding.

First of all, let us move to module window and declare a Global Variable to store the instances of invalid login attempt.

Public LoginInstance As Integer

Write the below code in code window of frmLogin Form.

Code to initialize the form controls on UserForm Initialize even.

Private Sub UserForm_Initialize()
     Me.txtUserID.Value = ""
     Me.txtPassword.Value = ""
    Me.txtUserID.SetFocus
End Sub

Code on click event of cmdLogin command button.

Private Sub cmdLogin_Click()
   Dim user As String

  Dim password As String

  user = Me.txtUserID.Value

  password = Me.txtPassword.Value

  If (user = "admin" And password = "admin") Or (user = "user" And password = "user") Then

    Unload Me
    Application.Visible = True

 Else

    If LoginInstance < 3 Then

        MsgBox "Invalid login credentials. Please try again.", vbOKOnly + vbCritical, "Invalid 
 Login Details"
        LoginInstance = LoginInstance + 1

    Else

        MsgBox "You have exceeded the maximum number of login attempts.", vbOKOnly + vbCritical, "Invalid Credentials"
        Unload Me
        ThisWorkbook.Close Savechanges:=False
        Application.Visible = True
        LoginInstance = 0

    End If

End If
End Sub

Code on click event of cmdClear command button.

Private Sub cmdClear_Click()
  Me.txtUserID.Value = ""
  Me.txtPassword.Value = ""

  Me.txtUserID.SetFocus

 'Code to exit- Please remove the comments if you want to use it exit
 ' Unload Me
 ' ThisWorkbook.Close Savechanges:=False
 ' Application.Visible = True

End Sub

Code to disable the close button available on frmLogin,

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
 If CloseMode = 0 Then Cancel = True
End Sub

Now, we have done with all the required codes for frmLogin. Let us double click on ThisWorkbook in Project Explorer window to view the code window.

Write down the below code on Window Open events to initialize the global variable, hide the Excel Window and show the Login Form.

Private Sub Workbook_Open()
  LoginInstance = 0
  Application.Visible = False
  frmLogin.Show
End Sub

We have completed the coding. Let us save this file and open it for testing. Once you open it and enable the Macro, it will show Login Form to enter credentials.

Login Form

Login window

Please watch our YouTube tutorial to learn how to create this Login form step by step.

Please click on below icon to download the Excel files used in this tutorial. (Use user name and password both ‘admin’ or ‘user’ to enter the credentials in login form and proceed with data entry process.)

Download

Click to download

Thanks for visiting our website! Please explore our site for more tutorial on Power BI, VBA and Excel. You can download several automated tools and templates.

Понравилась статья? Поделить с друзьями:
  • Автореферат в word как
  • Авторасширение ячейки excel по ширине
  • Авторасширение ячейки excel по высоте
  • Авторасширение таблицы в excel
  • Авторасширение столбцов в excel