안녕하세요! @gbgg 입니다. 능력있는 직장인이 되는법! 엑셀 자동화 강의 다섯번째 시간입니다!
지난 포스팅에서 UI에 대해 간략하게 다뤄보았는데요. 이번 시간에는 약간 확장팩? 인
폼 기능을 사용한 UI 만들기에 도전해볼까 합니다!
엑셀 VBA에는 정말 다양한 기능이 있는데 그 중 하나는 폼 기능입니다!
엑셀의 한계를 벗어나 원하는 모양대로 폼을 만들어 사용할 수 있는 아주 좋은 기능인데요.
이번 포스팅에서는 다음과 같은 기능을 구현해볼까 합니다.
어렵지 않으니 잘 따라와 주세요!
엑셀파일 A를 생성해주시고
오늘은 폼 위주로 셋팅할 예정이니 시트는 이렇게 '로그인기록' 이라는 시트를 생성해주시고
NO와 시간, 이름 3가지로 디자인해주시면 됩니다.
코드보기 를 통해 VBA에 진입하신 후 모듈을 생성할 때 처럼 사용자 정의 폼 을 생성해주시면 됩니다.
다음 그림과 같이 도구상자와 폼을 수정할 수 있는 폼 디자인 창이 생성됩니다.
로그인 정보를 기록할 때 모듈도 사용할 것이니 모듈도 생성해주세요!
오늘 사용할 폼 도구는 텍스트박스와 라벨, 그리고 버튼 입니다. 먼저 라벨을 넣어보겠습니다.
자 위 그림처럼 라벨이 생성되었나요? 이제 로그인 창임을 알 수 있게 디자인 해 보도록 하겠습니다.
생성한 라벨을 선택하고 왼쪽 하단의 속성 칸을 살펴봅시다.
여러가지 항목이 있습니다. 그 중 Caption 항목의 내용을 '업무 관리 프로그램' 으로 바꾸어봅시다.
라벨의 배경 색(BackColor)은 검은색으로 해 주시고 (취향대로 하셔도 됩니다)
라벨의 글씨 색(ForeColor)은 하얀색 으로 선택합니다.
폰트(Font) 항목의 자세히 버튼을 누르시면 다음과 같이 글씨체와 스타일 등을 변경할 수 있습니다.
자. 원하시는 대로 커스텀 하셨나요?
그럼 이제 라벨, 텍스트상자, 버튼을 사용하여 로그인 창 처럼 꾸며보도록 하겠습니다.
버튼은 여러가지가 존재하는데 명령단추(CommandButton) 로 생성하시면 됩니다.
여기까지 잘 따라오셨나요? 보시다시피 폼 디자인은 굉장히 단순하며 간편하고 자유롭습니다.
원하는 개체를 생성하여 속성을 변경할 수 있고 색상 등 디자인도 변경할 수 있습니다.
이제 이 개체들에 기능을 부여해야겠죠? 다음으로 넘어가기 전에 하나만 짚고 넘어가겠습니다.
코드를 통해 개체를 제어하려면 해당 개체의 이름을 잘 알아야 하는데요,
위 그림은 텍스트박스의 속성 창 입니다. (이름) 이라고 되어있는 부분이 이 개체의 이름인데요.
현재는 TextBox1로 되어있습니다. 코드를 작성할 때 이 개체를 호출하려면 TextBox1 이라는 이름으로 불러올 수 있습니다.
따라서 개체가 여러개 일 경우 자신이 알아보기 쉬운 이름으로 규칙성있게
변경해 주시면 쉽게 사용할 수 있습니다.
저는 다음과 같이 설정하였습니다.
자. 다음으로 넘어가보겠습니다.
기존 엑셀 시트에서의 버튼에 기능을 부여할 때에는 모듈을 생성하여 그 곳에 명령을 넣었습니다.
폼에서는 간단합니다. 로그인 버튼을 더블클릭 해 봅시다.
아래 그림처럼 자동으로 코드가 생성됩니다.
비주얼스튜디오 닷넷(.NET) 에서도 폼 화면에서 버튼을 더블클릭하면 자동으로 메소드를 생성시켜 주는데요,
VBA의 폼 화면에서도 이렇게 기본적인 명령은 클릭으로 생성할 수 있습니다.
다음 코드를 복사하여 붙여넣어 줍니다.
Private Sub CommandButton1_Click()
Dim inpwd As String
Dim cnt As Integer
inpwd = Trim(UserForm1.TextBox1)
If inpwd = "" Then
MsgBox "이름을 입력해주세요.", vbInformation, "로그인 실패"
Else
MsgBox " " & inpwd & "님 환영합니다. 접속시간 : " & Now(), vbInformation, "로그인 완료"
cnt = Sheets("로그인기록").Range("A1").CurrentRegion.Rows.Count + 1
Sheets("로그인기록").Cells(cnt, 1) = Val(Sheets("로그인기록").Cells(cnt - 1, 1)) + 1
Sheets("로그인기록").Cells(cnt, 2) = Now()
Sheets("로그인기록").Cells(cnt, 3) = inpwd
Unload UserForm1
End If
End Sub
Private Sub CommandButton2_Click()
MsgBox "프로그램을 종료합니다."
ThisWorkbook.Save
ThisWorkbook.Close
End Sub
다음 그림과 같이 붙여넣으시면 됩니다.
작성한 코드 기능은 다음과 같습니다.
버튼1을 눌렀을 때 이름이 써져있지 않다면 '이름을 입력해주세요' 라는 메세지창과 함께 넘어가지 않는다.
버튼1을 눌렀을 때 이름이 써져있다면 메세지창과 함께 폼이 닫히며 진입하게된다.
버튼2를 누르면 '프로그램을 종료합니다' 메세지와 함께 엑셀 파일이 저장되고 닫힌다.
X버튼을 누르면 명령이 취소되며 '닫기버튼은 작동되지 않습니다' 메세지가 뜬다.
자 이제 각 버튼에 능력들을 다 부여해 주었습니다.
이제 엑셀 파일을 열면 이 폼 화면이 열리도록 설정해주어야겠죠?
현재통합문서 를 더블클릭하여 다음과 같이 붙여넣습니다.
Private Sub Workbook_Open()
UserForm1.Show
End Sub
자 이제 워크시트가 열리면 UserForm1 을 Show 열게 됩니다.
이제 결과를 확인해 보겠습니다.
엑셀 파일을 열면 다음과 같이 창이 열립니다.
닫기 버튼을 누르면 다음과 같이 명령이 캔슬됩니다.
종료 버튼을 누르면 프로그램을 종료합니다 메세지와 함께 엑셀 파일이 종료됩니다.
이름을 적지 않으면 '로그인 실패' 메세지 박스가 뜨며 진행되지 않는다.
이름을 적고 로그인을 누르면 환영 메세지와 함께 현재 시간이 표시된다.
로그인이 성공되면 해당 사용자가 언제 접속했는지 기록이 남아야겠죠?
'로그인기록' 이라는 시트를 만들어 기록되도록 설정해두었는데요. 한번 기록이 잘 되었는지 확인해보겠습니다.
성공적으로 로그인 된 경우 이렇게 사용자 이름과 접속 시간이 기록된 것을 확인할 수 있습니다.
이 시트는 타인에 의해 변경되거나 삭제되면 안되므로 보호해줍시다.
비밀번호를 설정하시고 다음과 같이 셋팅해주시면 끝! 입니다.
inpwd = Trim(UserForm1.TextBox1)
Sheets("로그인기록").Cells(cnt, 2) = Now()
Unload UserForm1
ThisWorkbook.Save
ThisWorkbook.Close
inpwd 변수 안에 텍스트박스의 내용을 넣는 코드인데요, Trim은 왼쪽 공백을 없애주는 함수로써 이름을 쓸 때 앞에 공백이 들어가도 자동으로 지워지게끔 하는 부분입니다.
Now()는 엑셀 함수에서 자주 보셨을 텐데요, 여기서도 사용됩니다. 현재시간을 읽어오는 함수입니다.
Unload 란 현재 폼 창을 닫아주는 함수로 열려있는 폼 창을 닫을 때 사용됩니다.
이거는 굉장히 직설적이죠? 현재 워크시트를 저장하고 닫는다는 뜻입니다.
종료 버튼을 눌렀을 때 현재 상태를 저장하고 종료하게 만들 수 있습니다.
이번 포스팅에서는 로그인창을 생성하고 디자인한 뒤 로그인 한 사용자의 접속기록을 시트에 표시하는 기능을 구현해 보았는데요.
오늘 새로 언급한 폼 부분은 UI를 만드는 데 있어 자유도를 보장해 주므로 꼭 필요한 부분이라고 생각됩니다.
오늘은 세 가지 종류의 개체만 생성했지만 콤보박스, 사진, 단추 등 다양한 개체가 존재하므로 원하는 대로 꾸밀 수 있습니다.
엑셀 파일에는 공유 기능이 있습니다. 여러 명이 한 파일을 가지고 동시에 편집할 수 있는 기능입니다.
이 기능을 사용할 때 누가 언제 접속했는지 이름으로 남는다면 문제가 발생했을 때 유용하게 활용할 수 있을 것입니다.
이번 포스팅은 여기까지입니다.
아무래도 업무용으로 사용하려다 보니 이런 인터페이스 요소들도 중요하다고 생각되어 2차례에 걸쳐 언급하게 되었는데 생각보다 중요한 부분이므로 잘 익혀두셨으면 좋겠습니다.
오늘 강의에서 세세한 부분도 말씀드려야 할 것 같아 너무 복잡하게 작성한 것은 아닌지 걱정되네요 ㅠ_ㅠ
혹시 강의에 추가되었으면 하는 기능이 있다거나
조언해주실 부분이 있으시다면 댓글로 거침없이 피드백 주세요! 쓴소리 좋아합니다!
능력있는 직장인이 되기 위해 엑셀로 전산프로그램을 만들 때 까지 한번 열심히 달려봅시다!
다음 포스팅에서 뵙겠습니다!
지난 포스팅
[Excel] 1. 능력있는 직장인이 되는 법. 엑셀 자동화란?
[Excel] 2. 능력있는 직장인이 되는 법. 다른 파일 불러오기!
[Excel] 3. 능력있는 직장인이 되는 법. 물품 입고시키기!
[Excel] 4. 엑셀로 능력있는 직장인이 되는 법. 간편한 UI 만들기!