[Excel] 5. 엑셀로 능력있는 직장인이 되는 법. 로그인 + 접속기록 만들기!

in #kr6 years ago (edited)

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

지난 포스팅에서 UI에 대해 간략하게 다뤄보았는데요. 이번 시간에는 약간 확장팩? 인

폼 기능을 사용한 UI 만들기에 도전해볼까 합니다!

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

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

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

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

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


기본 셋팅

엑셀파일 A를 생성해주시고

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

NO와 시간, 이름 3가지로 디자인해주시면 됩니다.

폼 생성

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

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

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

폼 디자인

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


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

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

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

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

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

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

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

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

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

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

원하는 개체를 생성하여 속성을 변경할 수 있고 색상 등 디자인도 변경할 수 있습니다.

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

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

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

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

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

변경해 주시면 쉽게 사용할 수 있습니다.

저는 다음과 같이 설정하였습니다.

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

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


로그인 버튼 기능부여

기존 엑셀 시트에서의 버튼에 기능을 부여할 때에는 모듈을 생성하여 그 곳에 명령을 넣었습니다.

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

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

비주얼스튜디오 닷넷(.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(UserForm1.TextBox1)

inpwd 변수 안에 텍스트박스의 내용을 넣는 코드인데요, Trim은 왼쪽 공백을 없애주는 함수로써 이름을 쓸 때 앞에 공백이 들어가도 자동으로 지워지게끔 하는 부분입니다.

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

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

  • Unload UserForm1

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

  • ThisWorkbook.Save
  • ThisWorkbook.Close

이거는 굉장히 직설적이죠? 현재 워크시트를 저장하고 닫는다는 뜻입니다.
종료 버튼을 눌렀을 때 현재 상태를 저장하고 종료하게 만들 수 있습니다.

엑셀 자동화

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

오늘 새로 언급한 폼 부분은 UI를 만드는 데 있어 자유도를 보장해 주므로 꼭 필요한 부분이라고 생각됩니다.

오늘은 세 가지 종류의 개체만 생성했지만 콤보박스, 사진, 단추 등 다양한 개체가 존재하므로 원하는 대로 꾸밀 수 있습니다.

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

이 기능을 사용할 때 누가 언제 접속했는지 이름으로 남는다면 문제가 발생했을 때 유용하게 활용할 수 있을 것입니다.

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

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

오늘 강의에서 세세한 부분도 말씀드려야 할 것 같아 너무 복잡하게 작성한 것은 아닌지 걱정되네요 ㅠ_ㅠ

혹시 강의에 추가되었으면 하는 기능이 있다거나

조언해주실 부분이 있으시다면 댓글로 거침없이 피드백 주세요! 쓴소리 좋아합니다!

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

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


지난 포스팅

[Excel] 1. 능력있는 직장인이 되는 법. 엑셀 자동화란?

[Excel] 2. 능력있는 직장인이 되는 법. 다른 파일 불러오기!

[Excel] 3. 능력있는 직장인이 되는 법. 물품 입고시키기!

[Excel] 4. 엑셀로 능력있는 직장인이 되는 법. 간편한 UI 만들기!


Sort:  
@gbgg님 안녕하세요. 개사원 입니다. @bree1042님이 이 글을 너무 좋아하셔서, 저에게 홍보를 부탁 하셨습니다. 이 글은 @krguidedog에 의하여 리스팀 되었으며, 가이드독 서포터들로부터 보팅을 받으셨습니다. 축하드립니다!

오잉?! 감사합니다 ^-^

문돌이는 웁니다..ㅜㅜ

아이고 ㅠㅠ 네 조만간 기초편도 써볼게요!

멋있긴 한데 ㅠ 저같이 일반인들에겐 너무 어렵네요 ㅠ
혹시 이후에 초보자들을 위한 엑셀 강좌도 열리나요?? :)

넵! 기초인 함수부분 다루는 강의도 기획하고있는데 조만간 번외로 다뤄볼게요!

어려워보이지만 열심히 쓰신 정성이 느껴지네요. 평소 엑셀을 배우고 싶었는데 기초편이 나오면 배워봐야겠습니다!

포스팅 읽어주셔서 감사합니다! 기초편 생각보다 빨리 준비해야겠네요 ㅋㅋㅋ

저 진짜 꾸준보는중ㅋㅋ엑셀은 사랑입니다.

굽신굽신 고마워요! 명성 많이 올라셨네여 추카추카!

이건 아무리 봐도 개발컨텐츠인데요? ㅋㅋㅋ

신나서 쓰다보니 난이도조절에 실패했나봅니다... ㅠ_ㅠ 피드백 감사합니다!

좋아서 쓴말입니다. ㅎㅎ 아무래도 개발을 좀 하시는 분 같습니다만... #kr-dev 소모임쪽으로 오시지요 ㅎㅎㅎ

이렇게 정성이 가득 들어간 포스팅은 홍보해야죠. :)
@홍보해요

감사합니다! 홍보도 감사합니다!ㅎㅎ 스팀잇에는 굉장히 신기한 기능들이 많네요!

엑셀 장인을 여기서 뵙네요.ㅎㅎㅎㅎ

아유 아닙니다ㅠㅠㅋㅋㅋ 저도 배워가는게 많네요! 읽어주셔서 감사합니다~~

예전에 엑셀을 배우긴했는데 안쓰니깐 다까먹더라구요 ㅎㅎㅎ
앞으로 여기서 배워야겠는데요? ^^ 팔로우하고갑니다 ^^ 오늘도 좋은하루보내세요

잘 봐주셔서 감사합니다 ㅎㅎㅎ ^_^ 좋은하루되세요!

안녕하세요 시작한지,일주일도안된 뉴비입니다~~~
이벤트를 떠나서 이곳저곳에 저를알리려 노력중입니다~~!
보팅과 팔로우를하고 갈게요~^^

방문해주셔서 감사합니다! 앞으로 화이팅이용! :)

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 60320.14
ETH 3373.37
USDT 1.00
SBD 2.51