1. 사용자 정의 폼으로 로그인창 만들기
엑셀을 실행할 경우 로그인 창을 띄어 아이디와 암호를 입력받아 승인된 경우에만 엑셀 파일을 활용할 수 있게 하는 방법입니다. 아래 첨부된 사진과 같이 아이디와 비밀번호를 입력하면 등록된 아이디와 비밀번호와 일치하는지 확인 후 로그인 결괏값을 메시지 박스로 표시합니다.
2. 사용자 정의 폼 만들기
alt+F11을 눌러 VB편집기 창을 엽니다. 메뉴에 [삽입-사용자 정의 폼] 메뉴를 선택하여 폼을 만듭니다. 폼을 생성한 후 폼의 이름을 변경해줍니다. 폼의 속성창에서 [(이름)] 속성에 "frm로그인"을 입력합니다. 매크로 작성할 때 불러올 폼의 이름입니다. 중복된 이름으로 입력할 경우 기존의 모듈, 프로젝트 또는 개체 라이브러리와 충돌한다는 경고 메시지가 나타나며 입력 취소됩니다. 이름을 변경하고 [Caption] 속성은 "로그인"으로 입력합니다. 폼의 상단 제목창에 표시될 명칭으로 사용자가 폼을 실행했을 때 용도를 구분하기 쉽게 입력값을 설정하는 게 좋습니다.
3. 도구상자를 활용한 폼 꾸미기
로그인에 필요한 아이디와 비밀번호를 입력할 곳과 로그인 버튼과 닫기 버튼을 도구상자를 활용해 적당한 크기로 삽입합니다. 도구상자에서 레이브를 선택 후 폼에 적당한 크기로 드래그해줍니다. 삽입 후 첫 번째 레이블의 Captiond은 "아이디"로 입력하고 두 번째 레이블은 "비밀번호"로 입력해줍니다. 레이블 속성 [TextAlign] 가운데 정렬(2 - fm TextAlignCenter)로 변경합니다.
도구상자에서 텍스트 상자를 선택하여 레이블 옆으로 위치하게 적당한 크기로 드래그합니다. 아이디 입력칸과 비밀번호 입력칸이 필요하므로 2개를 삽입합니다. 텍스트 상자 "(이름)"을 "txt_ID", "txt_PW"로 입력합니다.
Private Sub UserForm_Activate()를 만들어 폼 활성화 시 실행할 코드를 작성합니다.
Private Sub UserForm_Activate()
txt_ID.IMEMode = fmIMEModeAlpha
txt_PW.PasswordChar = "*"
End Sub
[txt_ID.IMEMode = fmIMEModeAlpha]는 아이디를 입력할 텍스트 상자에 커서가 이동되면 자판 상태가 영문으로 설정됩니다. 아이디를 한글로 등록하는 경우 해당 코드를 삭제해도 폼 실행에는 문제없습니다.
[txt_PW.PasswordChar = "*"] 비밀번호를 입력하면 입력한 비밀번호 값이 표시되지 않고 *로 표시됩니다. 비밀번호가 보여도 상관 없는 환경인 경우 해당 코드를 삭제해도 폼 실행에는 문제없습니다.
위와 같이 간단한 명령문으로 폼 활성화될 때 텍스트 상자의 속성을 변경할 수 있고 코드 작성 없이 각 텍스트 상자 속성에서도 변경됩니다.
도구 상자에서 명령 버튼을 선택하여 적당한 크기로 드래그해 2개를 삽입합니다. 입력한 아이디와 비밀번호가 맞는지 검수하여 로그인 여부를 결정하는 버튼과 로그인 폼을 닫을 닫기 버튼입니다.
폼을 닫을 용도로 사용할 명령 버튼의 [Caption]을 "닫기"로 [(이름)]을 "cmd_close"로 변경합니다. 속성을 변경한 후 버튼을 더블클릭 한 후 폼을 닫는 명령인 Unload me를 입력합니다.
Private Sub cmd_close_Click()
Unload Me
End Sub
닫기 명령 버튼 속성 [Cancel]을 기본값 False를 True로 변경합니다. Esc키를 누르면 닫기 명령 버튼의 코드가 실행됩니다. 폼을 닫는 명령문이 입력되어 있으므로 Esc 키를 누르면 폼을 닫는 기능이 됩니다.
로그인 정보 값인 아이디와 비밀번호를 입력할 시트를 생성합니다. 시트명은 "로그인정보"로 만들고 ID, PassWord, user 필드 3개로 만듭니다.
로그인을 실행할 명령 버튼의 [Caption]을 "로그인"으로 [(이름)]을 "cmd_login"으로 변경합니다. 속성을 변경한 후 버튼을 더블클릭하여 로그인에 필요한 명령문을 입력합니다.
Private Sub cmd_login_Click() Dim Wsf As WorksheetFunction Dim str_user As String Set Wsf = WorksheetFunction On Error GoTo Er_next: x_ID = Wsf.Match(txt_ID, Sheets("로그인정보").Range("A:A"), 0) '# 일치하는 아이디가 있는지 확인, 일치하는 값이 없는 경우 오류코드 실행 x_PW = Wsf.VLookup(txt_ID, Sheets("로그인정보").Range("A:B"), 2) '# 입력한 아이디를 기준으로 비밀번호 찾기 If x_PW = Val(txt_PW) Then '# 비밀번호가 일치할 경우 str_user = Wsf.VLookup(txt_ID, Sheets("로그인정보").Range("A:C"), 3) MsgBox "로그인 성공!!" & vbCrLf & str_user & "님 어서오세요." Unload Me Else '# 비밀번호가 틀린 경우 MsgBox "비밀번호가 맞지 않습니다. 비밀번호를 확인해주세요." End If Exit Sub Er_next: '# 일치하는 아이디가 없는 경우 실행될 오류코드 MsgBox "일치하는 아이디가 없습니다. 아이디를 재확인해주세요." End Sub |
4. 시트 및 vba 잠금 설정
(1) 로그인 시트 만들기
엑셀 파일 실행 시 로그인 폼을 실행할 시트를 생성합니다. 시트명은 login으로 만들고 로그인 매크로를 연결할 도형을 삽입합니다. login 시트에서는 로그인 폼을 실행할 버튼만 있으면 되기 때문에 불필요한 눈금선, 머리글을 해제하여 깔끔하게 만듭니다.
(2) 잠금 설정
아래에 있는 시트 우클릭 후 숨기기를 설정할 경우에 별다른 제한 없이 숨기기 취소가 가능합니다. 제한이 없다면 로그인 기능을 사용할 필요가 없기 때문에 파일 실행 시 시트를 숨기고, 로그인이 완료되면 숨기기 취소를 할 수 있도록 설정하겠습니다. vb 편집기를 실행한 후 아래 첨부사진과 같이 "현재_통합_문서"를 선택한 후 "Workbook-Open"을 선택하여 엑셀 파일을 열면 실행 될 명령문을 작성해줍니다.
Sheets("로그인정보").Visible = xlSheetVeryHidden
엑셀 파일을 열면 "로그인정보" 시트는 숨기기 처리되어 사용자가 볼 수도 없고 숨기기 취소도 불가능합니다.
아이디와 비밀번호가 일치할 경우 시트 숨기기 취소 처리가 되도록 로그인 매크로에서 "로그인 성공" 메시지 박스 윗줄에 추가해줍니다.
Sheets("로그인정보").Visible = True
VBAproject 속성도 비밀번호를 설정해 사용자가 코드를 확인하고 임의 수정할 수 없도록합니다.
* 작업환경 : 엑셀2016
첨부파일 프로젝트 암호 없습니다. 시트 숨기기 설정되어 있으니 시트 숨기기 취소를 위해 로그인을 해주세요.
ID : admin1 / PW : 1234