[혈변강의 엑셀VBA] 3강: 컨트롤 다루기 by storm

3강: 컨트롤 다루기


지난 2강에서는 VBA에서 사용하는 코드의 기초와 이벤트 헨들링 방식, 그리고 컨트롤의 속성 등에 대한 기초중의 기초에 대해서 알아보았다. 이번 3강에서는 그에 이어서 많이 사용하는 컨트롤의 기본 용도와 활용하기 위한 코드에 대해서 살펴보도록 하자.


텍스트 상자 내용을 셀에 입력하기
1강에서 셀에 있는 텍스트를 유저폼의 텍스트 상자에 나타나게 하는 방법을 알아본 바 있다. 그러면 이번에는 반대로 텍스트 상자에 입력한 내용을 셀에 입력시키는 방법을 알아보자. 일단 지난 강좌에서 작성했던 파일을 열어서 개체 편집모드(Shift + F7)로 들어가자. 그다음에는 도구상자에서 명령 단추를 클릭해서 유저폼 위로 드래그 한다.

다음에는 방금 만든 명령 단추의 속성창에서 (이름) 속성은 btnInput 으로 바꾸고,  Caption 속성을 입력으로 수정한다.
//앞서도 한 번 이야기 했듯이 속성창에서 한글을 입력할 때는 현재 입력중인 글자가 깨져보이는데 단어를 완성하면 아무 문제 없으니 안심하라.
//지난 강좌에서도 언급했지만 컨트롤의 이름은 아무렇게나 지어도 프로그램은 동작하지만, 이름만 보아도 이것이 어떤 컨트롤이고 무슨 동작을 하는지 알아보기 쉽게 작성하는 것이 훗날 복잡한 프로그램을 만들 때 정신건강에 좋다.


그러면 이제 방금 만든 btnInput 이라는 이름의 명령 단추를 더블 클릭해보자. 그러면 코드 편집창에 다음과 같은 코드가 입력되어 있을 것이다.
--------------------------------------------------------------------------
Private Sub btnInput_Click()

End Sub
--------------------------------------------------------------------------

이번에는 SubEnd Sub 사이에 코드를 넣을 차례다. 텍스트 상자(TextBox1)의 텍스트를 Sheet1의 B1셀에 입력되게 하려면 어떤 코드를 작성해야 할까? 센스가 있는 분들은 대충 눈치 챘겠지만, 1강에서 작성했던 코드를 반대로 생각하면 된다. 즉 시트이름 . 셀주소 = 텍스트 상자 이름 . 속성명칭 과 같은 식이며 코드는 다음과 같다.
--------------------------------------------------------------------------
Private Sub btnInput_Click()

Sheet1.Range("B1") = TextBox1.Text

End Sub
--------------------------------------------------------------------------
이렇게 코드를 작성한 다음, VB편집기 상단 메뉴 아이콘 중  를 클릭해서(단축키는 F5) 유저폼을 실행시킨 다음 텍스트 상자에 아무 단어나 입력한 다음 방금 만들어놓은 [입력] 버튼 (btnInput)을 눌러보면 텍스트 상자에 써놓은 텍스트가 엑셀 시트의 지정한 셀에 입력될 것이다.

/* 참고로 위 예시 코드에서처럼 코드를 일정 폭 오른쪽으로 들여쓰기 하는 것은 Tab 키를 누르면 된다. 반대로 코드를 왼쪽으로 이동시키려면 Shift + Tab 키이다. 코드를 들여쓰기 하든 안 하든 프로그램의 동작에는 아무 영향이 없으나, 복잡한 코드를 작성할 때에는 적절하게 들여쓰기를 해주는 것이 코드를 읽기에 편하다. 아직은 코드가 너무 단순해서 별 의미가 없으니 이후에 좀 긴~ 코드를 작성할 때 쯤 한 번 더 언급하도록 한다. */

************************************************************************************
[Tip] 시트 이름을 새로 짓는 경우에는 어떻게?

만약 특정 시트의 이름을 짓고 그 시트에 연결하는 코드를 작성한다면 Worksheets("시트이름")으로 작성하면 된다. 즉 시트 이름이 유저폼테스트 라고 하면, 이 시트의 D24 셀은 Worksheets("유저폼테스트").Range("D24") 가 된다.
************************************************************************************


엑셀 시트에서 유저폼 실행하기
지금까지는 유저폼을 VB 편집창에서만 실행시켜보았다. 하지만 이런 식으로 유저폼을 여는 것은 어디까지나 프로그램을 만드는 중에서나 하는 방식이다. 실제로는 엑셀 시트에서 어떤 버튼을 누르면 유저폼이 실행되도록 하는 방식으로 만들어야 사용하기가 편할 것이다.

그러면 VB 편집기를 잠시 제쳐두고 오래간만에(?) 엑셀 화면으로 돌아가자. 그다음 상단 리본 메뉴에서 [개발도구]를 선택한 다음 [삽입] 메뉴에서 [양식 컨트롤] 중에 있는 단추를 클릭 하고 시트의 적당한 셀 위치에서 마우스 좌클릭 + 드래그로 단추를 그린다.

그러면 아래 그림과 같이 단추가 생성되고 [매크로 지정]이라는 이름의 창이 하나 생성된다. (단추의 이름과 매크로 이름은 필자의 스샷과 다를 수도 있다)
그럼 여기서 우측의 [새로 만들기] 메뉴를 선택하자. 그러면 자동으로 VB 편집창으로 화면이 전환되면서 다음과 같은 코드가 나와 있을 것이다.
--------------------------------------------------------------------------
Sub 단추1_Click()

End Sub
--------------------------------------------------------------------------
지난 2강에서 설명했듯이, 이 코드는 단추1 이라는 이름을 가진 개체에 클릭 이벤트가 발생할 때 실행되는 프로시저다. 따라서 Sub ~ End Sub 사이에 코드를 입력하면, 단추1 이 클릭될 때 그 코드들이 실행될 것이다.

음, 그러면 이 단추1 이란 놈은 왜 만들었던가? 우리의 의도는 이 단추를 클릭했을 때 유저폼이 열리게 만드는 것이다. 그러니까 당연히 이 프로시저에는 유저폼을 여는 코드가 들어가야 한다. 그 코드는 다음과 같다.
--------------------------------------------------------------------------
Sub 단추1_Click()

UserForm1.Show

End Sub
--------------------------------------------------------------------------
아니 이런 ㅅㅂ 생각보다 졸라 간단하지 않은가? 그냥 '유저폼의 이름.쑈'를 치면 된다. 이렇듯 비주얼 베이직의 코드는 사람이 쓰는 평범한(?) 영어 단어를 그대로 쓰는 경우가 많다. 유저폼의 이름을 부르고, 보여줘!(Show)라고 말하듯이 코딩하면 되지 않는가!

자 위와 같이 코드를 작성한 다음, 엑셀창으로 돌아와서 [단추1]을 눌러보면 유저폼이 짠~ 하고 나타날 것이다. 그런데 [단추1]이라는 이름이 거슬린다면, 그 단추를 마우스 우클릭 한 다음(좌클릭하면 눌러지기 때문에 우클릭 해야 한다) 단추에 적힌 텍스트를 직접 수정하면 된다.

그럼 반대로, 유저폼을 닫는 코드는 무엇이고 어디다 작성해야 할까? 한 번 스스로 고민해보라. 힌트는, 일단 유저폼에 명령 단추 하나를 새로 만들고 그 단추를 클릭했을 때 일어나는 이벤트 프로시저로 유저폼을 닫는 코드가 들어가야 한다. 유저폼을 닫는 코드는 Unload Me 니까 여러분이 직접 명령 단추를 만들고 코드를 입력해보자. 정답은 다음 강좌에서~

End Sub

//To be continued




덧글

  • 가티스트 2010/08/19 21:21 # 삭제 답글

    버튼을 눌렀을 때 유저 폼이 안 열리다가 엑셀을 닫고 다시 실행하니까 됐어요 'ㅅ'

    UserForm1 이걸 못 차는 것 같더라구요. 저만 그런걸까요?
  • storm 2010/08/19 21:29 #

    VBA 코드가 들어 있는 엑셀파일(*.xlsm)은 파일을 열때 '매크로를 사용 할 수 있도록' 보안설정을 해제해줘야 합니다. 안 그러면 코드가 작동하지 않습니다. 아마 파일을 다시 여실 때 보안설정을 해제하신 듯 하네요.
  • bonanza 2010/09/01 23:02 # 삭제 답글

    잘 봤습니다-!!
  • 우왕굳 2010/09/03 14:29 # 삭제 답글

    최고에요~
  • storm 2010/09/06 13:19 #

    'ㅅ')b
  • 에스프가르데 2010/09/23 12:19 # 삭제 답글

    여기까지 무사히(?) 완료했습니다 > <ㅎㅎ
  • 2010/10/01 06:09 # 삭제 답글

    상단 리본 메뉴에서 [개발도구]를 선택한 다음 [삽입] 메뉴에서 [양식 컨트롤].... 제가 한글판 엑셀 유저가 아니라 그런데... 아무리 찾아봐도 저거 비스무리한 것을 찾을 수가 없네요...보이는 거라곤 [Macros]란 안에 있는 [View Macros],[Record Macros],랑[Relative References]... 어찌된 일일까요...
  • storm 2010/10/01 09:09 #

    엑셀2007 버전이 맞으시는지요?
  • 로웰 2013/01/04 14:16 # 삭제

    저도 비슷하게 해맸는데.. ㅎㅎ
    엑셀 옵션으로 들어가셔서, Customize 탭에서 Show Quick Access Toolbar below the Ribbon에 Check하세요
  • 마장기 2011/01/25 19:44 # 답글

    푸핫.... ㅅㅂ생각보다 졸라 간단하지 않은가?
    에서 빵 터졌습니다. ㅎㅎㅎ 좋은 강의 감사합니다.
    재미까지 선사해 주시는군요.
  • storm 2011/01/26 10:26 #

    재미가 있어야 공부도 잘되죠 :)
  • 스피라 2011/04/05 18:06 # 삭제 답글

    님때문에 비베 정말 이해가 쉬운거 같에요 ~~감사합니당~~(__)
  • storm 2011/04/06 09:08 #

    열심히 하세요 ^_^
  • 돌쇠 2012/11/26 03:55 # 답글

    이번편도 잘봤습니다. 다음편 보러 갑니다.
댓글 입력 영역



통계 위젯 (화이트)

1519
244
503012