엑셀(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 녹두장군