Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3부

엑셀(Excel)/VBA

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3

 

환경 : Microsoft Excel 2010

 

이번예제는 엑셀이 시작될 때 로그인 창이 뜨게 해서 정확한 값을 입력하지 않으면 엑셀을 실행하지 못하도록 할 것입니다그래야 로그인 창이라고 할수 있겠죠.

 

엑셀을 실행하게 되면 동영상에서 보는 바와같이 창이 뜨게 되고 정확한 값을 입력하지 않으면 틀리다고 메시지를 띄우게 됩니다. 그리고 종료를 누르게 되면 엑셀이 종료 됩니다.

 

 

이것을 구현하기 위해 몇가지 수정을 하였습니다. 종료 버튼을 클릭하게 되면 엑셀 전체가 종료하게 되는데 Application.Quit 를 사용했습니다.

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3부

 

폼을 엑셀이 로딩할 때 띄우기 위해 [현재_통합_문서] 에서 작업을 하였습니다. Workbook_Open() 이벤트가 발생할 때 frmLogin.Show 로 폼을 띄우게 되는 것이죠. 그리고 사용자 정보시트에 로그인 정보가 있는데 보이면 안되므로 처음에는 숨깁니다.

 

Private Sub Workbook_Open()

    Worksheets("사용자정보").Visible = False

    frmLogin.Show

End Sub

 

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3부

 

다음은 로그인 폼에서 X 버튼을 클릭하게 되면 로그인 없이 들어갈수 있기 때문에 그 부분을 제어해야 합니다. UserForm QueryClose() 이벤트 함수에서 가로채는게 가능합니다. 인수로 넘어오는 CloseMode 상수값이 vbFormControlMenu 이면 X 버튼이라는 거죠. 이분이 작동하지 않도록 아래와 같이 소스를 추가 하였습니다.

 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = vbFormControlMenu Then

        MsgBox "x 버튼은 동작하지 않습니다."

        Cancel = True

    End If

End Sub

 

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3부

 

프로그램을 실행해서 폼의 X 버튼을 클릭하게 되면 아래와 같이 메시지를 띄워주게 됩니다.

엑셀(Excel) VBA - 사용자 정의 폼으로 로그인 기능 만들기 3부

 

마지막으로 로그인 버튼을 클릭했을때의 전체 소스 입니다. 로그인이 제대로 되었으면

Worksheets("사용자정보").Visible = True 사용해서 사용자 정보 시트를 다시 보이게 했습니다.

 

Private Sub btnConfirm_Click()

    Dim loginData As Range

    Dim pwd As String

    Dim name As String

       

    Set loginData = Sheets("사용자정보").Range("A3:C6")

On Error Resume Next

    pwd = Application.VLookup(Me.txtId, loginData, 2, 0)

    name = Application.VLookup(Me.txtId, loginData, 3, 0)

   

    '' VLookup 에서 찾지 못했을때 이부분을 타게됨

    If Err.Number <> 0 Then

        MsgBox "해당 ID 가 존재하지 않습니다.\n 다시 확인해주세요", vbCritical, "ID 오류"

        Exit Sub

    End If

   

    '' 패스워드 확인

    If pwd = Trim(Me.txtPwd) Then

        MsgBox "로그인 성공하였습니다.", vbInformation, "로그인확인"

        Worksheets("사용자정보").Visible = True

        Unload Me

    Else

        MsgBox "암호가 일치하지 않습니다.", vbCritical, "패스워드 오류"

    End If

 

End Sub

 

이것으로 사용자정의 폼을 이용해서 엑셀도 정해진 사용자 이외에 사용하지 못하도록 보안기능을 넣었는데 이것이 완벽하지는 않습니다. 몇가지 구멍이 있긴한데 사용자들 몫으로 두겠습니다.

Posted by 녹두장군

댓글을 달아 주세요

  1. 의천도룡기 2015.03.31 17:37  댓글주소  수정/삭제  댓글쓰기

    로그인창에서 X버튼은 저렇게 방어가 가능한데,
    취소 버튼을 누르면 저장하겠냐는 메시지가 뜨네요..
    그리고 저장취소 버튼을 누르면 로그인 하지 않고도 엑셀을 사용할 수 있게 됩니다..
    이 문제 해결 가능할런지요?ㅠ 도움 부탁드립니다~

    • 작은새싹 2015.11.26 10:39  댓글주소  수정/삭제

      닫기 버튼에

      Private Sub btnClose_Click()
      Application.Quit
      Application.DisplayAlerts = False
      End Sub

      이 문구를 추가하시면 됩니다.
      저장하겠나는 메세지도 안뜨고 항상 "예" 로 저장되면서 엑셀이 닫혀버립니다.

  2. 기술분야 2015.12.11 17:19  댓글주소  수정/삭제  댓글쓰기

    엑셀 파일을 클릭하면 그냥 파일이 열리는데요.
    로그인 창이 먼저 안 뜨는데요. 엑셀 시트가 다 열린 상태에서
    옵션의 컨텐츠 사용하기를하면 로그인 창이 뜨는데 패스워드를 입력하면 암호화 되어 있지 않고 그냥 글자가 다 보입니다.

  3. 한별 2017.12.23 18:46  댓글주소  수정/삭제  댓글쓰기

    아이디랑 비밀번호 입력해서 로그인 한 후에 그 아이디에 해당하는 사람의 개인정보를 폼으로 뜨게 할 방법은 없을까요??

  4. 김기철 2020.05.19 13:59  댓글주소  수정/삭제  댓글쓰기

    로그인 화면에서~
    확인 버튼 클릭하면~
    사용자정의 폼으로 바로 넘어가게 하는 강좌도 쫌 올려주세요~