엑셀 VBA 강의 2-2 편 | 엑셀 VBA로 만드는 네이버 자동로그인 프로그램 2탄 (유저폼 설정)
1. 매크로 활성화 체크
만약 새로 예제파일을 다운받으신 경우, 예제파일은 매크로가 포함된 파일이므로 상단에 [매크로활성화 버튼]을 체크해주세요.

2. 옵션버튼 편집하기
각각의 옵션버튼을 누를때마다, 선택된 포탈사이트의 커맨드버튼이 나타나도록 옵션버튼에 Click 이벤트 명령문을 입혀줍니다.
네이버 로그인, 구글 로그인, 다음 로그인에 해당하는 각각의 옵션버튼에 원하는 동작이 실행될 수 있도록 아래에 적힌 코드를 유저폼 모듈 안에 넣어주세요.

Private Sub optNaver_Click() Me.btnNaver.Visible = True Me.btnDaum.Visible = False Me.btnGoogle.Visible = False End Sub Private Sub optGoogle_Click() Me.btnNaver.Visible = False Me.btnDaum.Visible = False Me.btnGoogle.Visible = True End Sub Private Sub optDaum_Click() Me.btnNaver.Visible = False Me.btnDaum.Visible = True Me.btnGoogle.Visible = False End Sub
2-A. 사용자정의폼에서 '컨트롤이름_이벤트종류' 로 명령문 작성
유저폼 모듈(유저폼에서 동작하는 명령문의 집합체) 안에서, ‘컨트롤이름_이벤트종류’로 명령문의 이름을 설정해주면 해당하는 컨트롤에서 선택된 이벤트가 일어났을 때 입력한 코드가 실행됩니다.

각 컨트롤마다 사용할 수 있는 이벤트의 종류는 다양하고 특정 컨트롤에서만 활성화되는 이벤트도 있습니다. 해당 유저폼의 컨트롤 목록은 왼쪽 상단에서, 이벤트종류의 목록은 오른쪽 상단에서 확인할 수 있습니다.
컨트롤의 종류와 해당하는 이벤트를 어떻게 사용하는지는 새로운 내용이 있을때 매 강의마다 하나씩 알려드리겠습니다.

2-B. 사용자정의폼(유저폼) Me의 사용법
유저폼에서 사용하는 명령문을 작성할 때에, 해당 유저폼의 컨트롤(옵션버튼, 커맨드버튼, 콤보박스 등)을 쉽게 불러오기 위해서 me를 사용할 수 있습니다.
me를 입력한 뒤 점(.) 을 입력하시면 현재 유저폼에 해당하는 함수, 상태뿐만 아니라 현재 유저폼에 사용된 컨트롤의 이름들을 아래와같이 쉽게 불러올 수 있습니다.

2-C. 유저폼 visible 사용법
유저폼의 컨트롤에서 visible 값을 이용하면 해당 컨트롤을 보이게 할지 또는 안보이게 할지를 결정할 수 있습니다.
예를 들어, optionbutton.Visible = False 로 할 경우, 해당 optionbutton은 유저폼에서 보이지 않게 됩니다. 추가사항으로, visible 값을 False로 한다고 하여도 유저폼상에서 보이지만 않을 뿐 (투명상태) 내부적으로는 계속 존재하므로 숨겨진 컨트롤의 다른 이벤트는 그대로 실행할 수 있습니다.

3. 유저폼 초기화 상태 편집하기
사용자가 유저폼을 처음 실행하였을 때, 좀 더 편리하게 이용할 수 있도록 유저폼의 초기상태를 설정해줍니다.
첫번째로, 유저폼이 실행 되었을 때 가장 자주 사용하는 포탈사이트가 기본값으로 선택되어 있도록 명령문을 입력합니다.
'################################ '자주사용하는 포털사이트의 옵션버튼 값을 체크해줍니다. '################################ Me.optNaver.Value = True
두번째로, 사용자가 유저폼을 실행함과 동시에, 별도의 마우스 이동없이 아이디와 비밀번호를 바로 입력할 수 있도록 해줍니다. ID를 입력하는 텍스트박스에 포커싱이 잡혀있도록 설정해줍니다.
'################################ '아이디 텍스트박스에 포커싱을 잡아줍니다. '################################ Me.txtID.SetFocus
3-A. 사용자의 편의를 위한 SetFocus 의 중요성
직장인들에게 반복되는 업무에 있어서 '1초, 2초'의 시간절약은 매우 큰 효과를 불러올 수 있습니다. 유저폼(사용자정의폼)을 사용하는 가장 큰 이유중에 하나가 바로 '반복되는 업무의 자동화' 인데요.
유저폼 VBA 에서 코드 중간에 SetFocus를 잘 잡아준다면 사용자가 유저폼을 사용하면서 시간단축을 하는데 많은 도움을 줄 수 있습니다.

4. 아이디와 비밀번호를 입력하는 텍스트상자 초기화 설정하기
대부분의 사용자는 이용하는 각각의 포탈사이트의 아이디와 비밀번호를 다르게 만들어서 이용합니다. 따라서, 네이버 로그인에서 구글 로그인으로 옵션버튼을 변경할 경우(로그인하려는 포탈사이트를 변경할 경우) 아이디와 비밀번호를 입력하는 텍스트박스를 초기화하는 명령문을 만들어줍니다.
아래 코드를 복사해서 유저폼 모듈안에 붙여넣기 하세요.
Sub Clear_txt() Me.txtID = "" Me.txtPW = "" End Sub
코드를 붙여넣기 하셨으면, 이전에 작성한 옵션버튼의 Click 이벤트에 Clear_txt 명령문을 각각 입력해줍니다. (아 부분이 어려우시다면 영상강의를 참조해주세요!)
Private Sub optNaver_Click() Me.btnNaver.Visible = True Me.btnDaum.Visible = False Me.btnGoogle.Visible = False Clear_txt End Sub
4-A. Private Sub 과 Sub 의 차이점 (Private Sub vs Public Sub vs Sub)
유저폼 명령문은 접근범위에 따라 크게 2가지로 나눌 수 있습니다. 하나는 Private (제한적으로 접근 가능한)이고, 또다른 하나는 Public (어디서든 접근 가능한) 입니다. (VBA에서 Public Sub과 Sub은 동일합니다.)
만약 명령문을 Private 로 설정하게되면, 명령문이 입력된 모듈 안에서만 호출/실행 할 수 있습니다. 명령문을 Private으로 설정할 경우 하나의 파일안에 여러 개의 모듈이 있을 시 명령문 간의 충돌을 막아줄 수 있으나, 유저폼에서와 같이 특별한 경우에만 Private으로 명령문을 작성하고 보통은 Public으로 명령문을 작성합니다.
Private 과 Public 의 차이점은 다른 오빠두 VBA 기초강좌에서도 자주 확인하실 수 있습니다.

5. 입력된 아이디와 비밀번호 관리하기
아래 코드를 복사해서 유저폼 모듈에 붙여넣기 하세요.
Sub Get_ID_PW() MsgBox "입력하신 아이디는 " & Me.txtID.Value & " 입니다." & vbNewLine _ & "입력하신 비밀번호는 " & Me.txtPW.Value & " 입니다." End Sub
코드를 붙여넣기 하셨으면, Get_ID_PW 명령문을 각각의 커맨드버튼 Click 이벤트 안에 넣어줍니다.
Private Sub btnDaum_Click() Get_ID_PW End Sub Private Sub btnGoogle_Click() Get_ID_PW End Sub Private Sub btnNaver_Click() Get_ID_PW End Sub
5-A. 엑셀 VBA에서 msgbox 사용법
유저폼에서 메시지박스(msgbox)를 띄우는 방법을 매우 간단합니다. (물론 msgbox 함수안에서 다양한 상태값을 설정할 수도 있습니다. 이 내용은 이후 msgbox 고급강의에서 다루도록 하겠습니다.)
메시지박스는 별도의 설정 없이도 아래와 같이 1문장으로 쉽게 이용할 수 있습니다.
'############################ '엑셀 VBA msgbox 초간단 사용법 '############################ Msgbox “원하는 내용 입력”
VBA에서는 “큰따옴표(“’)” 를 이용하여 ‘내가 직접 입력하는 텍스트 값’ 을 구분합니다.
예를 들어 유저폼의 ‘아이디 텍스트박스’ 에서 아이디 값을 불러올 경우, 그것은 ‘내가 직접 입력한 텍스트’가 아니라 ‘텍스트박스에서 불러오는 텍스트로 이루어진 값’입니다. 만약 텍스트박스에서 불러오는 값도 큰 따옴표안에 같이 넣어버리게 된다면, VBA에서는 모든 문장을 직접 입력한 문장으로 인식하게 되고, 따라서 ‘텍스트박스의 값’이 아닌 ‘me.txtID.Value’ 처럼 코드문장이 결과값으로 출력이 됩니다.
여러분의 좀 더 빠른 이해를 위해, 모듈을 하나 새로 추가한뒤 뒤 아래 코드를 모듈안에 붙여넣기 한 후 실행해보겠습니다.

'############################ 'vba 텍스트 입력방법의 이해 '############################ Sub Msgbox_Test() Dim Str As String Str = "오빠두" ‘str은 텍스트로 불려질 값 MsgBox "안녕하세요. " & Str & "입니다." ‘#안녕하세요# 와 #입니다# 는 직접 입력한 텍스트 ‘만약 “안녕하세요. “ & “Str” & “입니다.” 를 입력할 경우 -> “안녕하세요. Str입니다.” 가 메시지박스에 출력됨. 즉 Str을 직접 입력한 텍스트로 인식함. End Sub
6. 모든 작업 완료 후 유저폼 종료하기
입력한 아이디와 비밀번호가 정상적으로 확인되었고 메시지박스가 출력되었으면 (= 즉 포탈사이트에 로그인이 완료 되면), 유저폼이 자동적으로 닫히도록 코드를 넣어줍니다.

각 커맨드버튼의 Click 이벤트 명령문 안에 Unload Me 함수를 아래와같이 넣어주세요.
'############################ '엑셀 VBA Unload Me 사용법 '############################ Private Sub btnDaum_Click() Get_ID_PW Unload Me End Sub