반응형

안녕하세요! gbgg 입니다. 능력 있는 직장인이 되는 법! 엑셀 자동화 강의 다섯 번째 시간입니다!

지난 포스팅에서 UI에 대해 간략하게 다뤄보았는데요.

 

이번 시간에는 지난 포스팅보다 심화된 폼 기능을 사용하여 UI를 만들어볼까 합니다.

엑셀 VBA에는 정말 다양한 기능이 있는데 그 중 하나는 폼 기능입니다!

 

엑셀의 한계를 벗어나 원하는 모양대로 폼을 만들어 사용할 수 있는 아주 좋은 기능인데요.

이번 포스팅에서는 다음과 같은 기능을 구현해볼까 합니다.

 

오늘 구현할 기능은 다음과 같습니다!

  1. 일을 열면 로그인 창이 뜨고 이름을 물어본다. 
  2. 그인하면 접속기록 시트에 이름과 시간이 자동으로 기록된다.
  3. 료 버튼을 누르면 엑셀파일을 빠져나가게 된다.

어렵지 않으니 잘 따라와 주세요!


기본 셋팅

오늘은 폼 위주로 세팅할 예정이니 시트는 이렇게 '로그인 기록'이라는 시트를 생성해주고

NO와 시간, 이름 3가지로 항목을 만들면 됩니다.

폼 생성

코드 보기를 통해 VBA에 진입하신 후 모듈을 생성할 때처럼 사용자 정의 폼을 생성해주시면 됩니다.

다음 그림과 같이 도구 상자와 폼을 수정할 수 있는 폼 디자인 창이 생성됩니다.

로그인 정보를 기록할 때 모듈도 사용할 것이니 모듈도 생성해주세요!

폼 디자인

오늘 사용할 폼 도구는 텍스트 박스와 라벨, 그리고 버튼입니다. 먼저 라벨을 넣어보겠습니다.

 

위 그림처럼 라벨이 생성되었나요? 이제 로그인 창임을 알 수 있게 디자인해 보도록 하겠습니다.

 

생성한 라벨을 선택하고 왼쪽 하단의 속성 칸을 살펴봅시다.

여러 가지 항목이 있습니다. 그중 Caption 항목의 내용을 '업무 관리 프로그램'으로 바꾸어봅시다.

라벨의 배경 색(BackColor)은 검은색으로 해 주시고 (취향대로 하셔도 됩니다)

라벨의 글씨 색(ForeColor)은 하얀색으로 선택합니다.

폰트(Font) 항목의 자세히 버튼을 누르면 다음과 같이 글씨체와 스타일 등을 변경할 수 있습니다.

자. 원하시는 대로 커스텀하셨나요?

 

그럼 이제 라벨, 텍스트 상자, 버튼을 사용하여 로그인 창처럼 꾸며보도록 하겠습니다.

버튼은 여러 가지가 존재하는데 명령단추(CommandButton) 로 생성하시면 됩니다.

여기까지 잘 따라오셨나요? 보시다시피 폼 디자인은 굉장히 단순하며 간편하고 자유롭습니다.

닷넷이나 MFC처럼 엑셀에서도 이렇게 폼을 디자인할 수 있습니다.

 

이제 이 개체들에 기능을 부여해야겠죠? 다음으로 넘어가기 전에 하나만 짚고 넘어가겠습니다.

코드를 통해 개체를 제어하려면 해당 개체의 이름을 잘 알아야 하는데요,

위 그림은 텍스트 박스의 속성 창입니다. (이름)이라고 되어있는 부분이 이 개체의 이름인데요.

 

현재는 TextBox1로 되어있습니다. 코드를 작성할 때 이 개체를 호출하려면 TextBox1이라는 이름으로 불러올 수 있습니다.

 

따라서 개체가 여러 개 일 경우 자신이 알아보기 쉬운 이름으로 규칙성 있게 변경해 주세요!

 

저는 다음과 같이 기본 값 대로 설정하였습니다.

  • 아이디 넣는 텍스트 박스 -> TextBox1
  • 로그인 버튼 -> CommandButton1
  • 종료 버튼 -> CommandButton2

자. 다음으로 넘어가 보겠습니다.


로그인 버튼 기능부여

기존 엑셀 시트에서의 버튼에 기능을 부여할 때에는 모듈을 직접 생성하여 명령을 추가하였는데요.

 

폼에서는 간단합니다. 로그인 버튼을 더블클릭해 봅시다.

아래 그림처럼 자동으로 코드가 생성됩니다.

닷넷(. NET)이나 MFC에서도 폼 디자인에서 버튼을 더블클릭하면 자동으로 메서드를 생성시켜 주는데요,

엑셀 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이 표시되게 됩니다.

이제 결과를 확인해볼까요?


결과

엑셀 파일을 열면 다음과 같이 창이 열립니다.

오른쪽 상단의 닫기 버튼을 누르면 다음과 같이 명령이 캔슬됩니다.

종료 버튼을 누르면 프로그램을 종료합니다 메시지와 함께 엑셀 파일이 종료됩니다.

이름을 적지 않고 로그인을 누르면 '로그인 실패' 메세지 박스가 뜨며 진행되지 않습니다.

이름을 적고 로그인을 누르면 환영 메세지와 함께 현재 시간이 표시된다.

로그인이 성공되면 해당 사용자가 언제 접속했는지 기록이 남아야겠죠?

히스토리를 추가해봅시다.

 

'로그인 기록'이라는 시트를 만들어 기록되도록 설정해두었는데요. 한번 기록이 잘 되었는지 확인해보겠습니다.

성공적으로 로그인된 경우 이렇게 사용자 이름과 접속 시간이 기록된 것을 확인할 수 있습니다.

 

이 시트는 타인에 의해 변경되거나 삭제되면 되지 않기 때문에 보호해줍시다.

비밀번호를 설정하시고 다음과 같이 세팅해주시면 끝입니다.

 

코드 분석

inpwd = Trim(UserForm1.TextBox1)

Sheets("로그인기록").Cells(cnt, 2) = Now()

Unload UserForm1

ThisWorkbook.Save
ThisWorkbook.Close
  • inpwd = Trim(UserForm1.TextBox1)

inpwd 변수 안에 텍스트 박스의 내용을 넣는 코드인데요.

Trim은 왼쪽 공백을 없애주는 함수로써 이름을 쓸 때 앞에 공백이 들어가도 자동으로 지워지게끔 할 수 있습니다.

 

  • Sheets("로그인기록").Cells(cnt, 2) = Now()

Now()는 엑셀 함수에서 자주 보셨을 텐데요, 여기서도 사용됩니다. 현재시간을 나타내는 함수입니다.

 

  • Unload UserForm1

Unload 란 현재 폼 창을 닫아주는 함수로 열려있는 폼 창을 닫을 때 사용됩니다.

 

  • ThisWorkbook.Save
  • ThisWorkbook.Close

이 부분은 말 그대로 현재 워크시트를 저장하고 닫는다는 뜻입니다.
종료 버튼을 눌렀을 때 현재 상태를 저장하고 종료하게 만들 수 있습니다.

엑셀 자동화

이번 포스팅에서는 로그인 창을 생성하고 디자인한 뒤 로그인 한 사용자의 접속기록을 시트에 표시하는 기능을 구현해 보았는데요.

 

오늘 새로 언급된 폼은 UI를 보다 자유롭게 생성할 수 있도록 해주므로 엑셀 자동화에 꼭 필요한 기능입니다.

콤보박스, 사진, 단추 등 다양한 개체가 존재하므로 원하는 대로 꾸밀 수 있습니다.

 

엑셀 파일 설정에는 공유 기능이 있습니다. 여러 명이 한 파일을 가지고 동시에 편집할 수 있는 기능입니다.

이 기능이 활성화되어있을 때 누가 언제 접속했는지 히스토리가 기록된다면 문제가 발생했을 때 유용하게 활용할 수 있을 것입니다.

 

이번 포스팅은 여기까지입니다.

업무에 필요한 기능들 위주로 포스팅하다 보니 이런 인터페이스 요소들도 중요하다고 생각되어 2차례에 걸쳐 언급하게 되었는데 생각보다 중요한 부분이므로 잘 익혀두셨으면 좋겠습니다.

 

혹시 강의에 추가되었으면 하는 기능이 있다거나 조언해주실 부분이 있으시다면 댓글로 피드백 주세요!

 

능력 있는 직장인이 되기 위해 엑셀로 전산프로그램을 만들 때 까지 한번 열심히 달려봅시다!

다음 포스팅에서 뵙겠습니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기