[혈변강의 엑셀VBA] 2강: VBA 코드 뜯어먹기 - 기초 by storm

2강: VBA 코드 뜯어먹기 - 기초


코드를 '쳐묵쳐묵' 해보자
이번에는 지난 강좌에서 만들었던 유저폼의 프로시저 코드를 하나하나 짚어보며 코드의 구성요소에 대해서 이해해보자. 1강에서 코드를 작성해보았으면 잘 알고 있겠지만 코드는 아래와 같았다.
----------------------------------------------------------------------------
Private Sub CommandButton1_Click()
TextBox1.Text = Sheet1.Range("A1")
End Sub
----------------------------------------------------------------------------

이벤트 핸들링 방식에 대해서
Sub 다음에 오는 CommandButton1_Click() 구문에서 CommandButton1컨트롤의 이름이다. 컨트롤이란 1강에서 만들어보았던 텍스트 상자, 명령 단추를 비롯해서, VB 편집창의 [도구 상자]에 있는 레이블, 콤보 상자, 목록 상자, 옵션 단추 등과 같이 사용자 정의 폼(User form)에 삽입할 수 있는 개체들을 의미한다.

컨트롤 이름 뒤에 연결된 Click()은 말 그대로 '클릭(되었을 때)'을 뜻한다. 즉 Sub CommandButton1_Click() 이란 CommandButton1 이란 이름을 가진 컨트롤이 클릭 된 경우에 수행할 프로시저라는 얘기다. 여기서 '클릭'과 같이 개체에 어떤 일이 벌어지는 것을 '이벤트(event)'라고 하며, 이벤트를 중심으로 프로그램이 동작하는 것을 이벤트 핸들링(event handling)이라고 한다.


코드를 쳐묵쳐묵~
자 그러면, 이제 실제 코드의 구성을 하나하나 살펴보자. 아래 그림을 보면 한 줄의 코드가 총 4가지의 구성요소로 이루어졌음을 알 수 있을 것이다.
지난 1강에서 코드를 직접 작성해본 사람은 알 수 있겠지만, TextBox1은 텍스트가 표시되는 텍스트 상자, 즉 컨트롤의 이름이다. 그리고 뒤에 붙는 .Text는 텍스트 상자의 속성 중 하나이다. 그리고 텍스트 상자에게 Text 속성이란 상자에 표시되는 텍스트를 의미한다. 아래 그림처럼 VB 편집기의 유저폼 화면에서 텍스트 상자를 한 번만 클릭한 다음, 속성창에서 Text 항목을 찾은 후에 오른쪽 의 속성값 입력칸에 아무 글자나 입력해보자. 그러면 유저폼 상의 텍스트 상자에 입력된 글자가 즉각적으로 나타날 것이다.

즉 VB 코드 TextBox1.Text = ... 이란 유저폼 상의 TextBox1 이란 이름의 컨트롤이 보유하고 있는 Text 속성에 ... 에 해당하는 값을 입력하라는 의미인 것이다. 그럼 내친김에 다른 속성도 한 번 쳐묵쳐묵 해보자. VB 편집창에서 코드 편집 모드로 전환한 다음 (단축키 F7) CommandButton1_Click() 프로시저 안에 다음 코드를 입력한 다음 단축키 F5를 눌러서 유저폼을 연 다음 명령 단추를 클릭해 보라.
입력할 코드: TextBox1.Height = 60
위 코드를 입력한 다음에 실행시켜보면 명령 단추(CommandButton1)을 클릭했을 때 글자만 표시되는 것이 아니라, 텍스트 상자의 높이(height)가 지정한 수치만큼 길어질 것이다. 왜냐하면 위의 코드가 TextBox1 이란 이름의 컨트롤이 가진 Height 속성을 60으로 변경시키기 때문이다. 컨트롤의 Height 속성은 해당 개체의 높이(세로 길이)이다.

그럼 이번에는 다시 개체 편집 모드(Shift + F7)로 전환한 다음에 아래 그림과 같이 원래 있던 명령 단추 밑에 명령단추를 하나 더 만들어보자.

새로 만들어진 명령 단추의 이름은 CommandButton2 로 지정된다. 이번에는 이 단추의 이름을 바꿔보자. 새로 만든 명령 단추를 클릭한 상태에서 속성창에서 (이름)항목에 있는 CommandButton2 를 지우고 btnResize 라고 입력해보자. 그러면 방금 만든 명령 단추의 이름은 이제 CommandButton2 가 아닌 btnResize 가 되는 것이다. - 여기서 btn 은 단추라는 뜻의 button의 약자로, 보통 명령 단추의 이름을 정할 때 많이 쓰는 약어이다. 마찬가지로 텍스트 상자는 보통 txt~ 로 많이 쓴다.

명령 단추의 이름을 변경했다면, 방금 만든 명령 단추를 더블클릭 해보자. 그러면 코드 편집모드로 전환되면서 아래와 같은 코드가 보일 것이다.
----------------------------------------------------------------------------
Private Sub btnResize_Click()

End Sub
----------------------------------------------------------------------------
이제 Sub와 End Sub 사이에 코드를 하나 입력해보자. 입력할 코드는 이 명령 단추를 클릭했을 때, TextBox1의 높이가 원래의 높이 (18이다)로 변경되도록 하는 것이다. 어떤 코드를 입력해야 할까? 지금까지 배운 내용을 토대로 고민해보다가 정 안되면 아래를 드래그해서 답을 보라.

입력해야 할 코드(오른쪽을 드래그 하면 보임): TextBox1.Height = 18
자 답을 보지 않고도 코드를 제대로 입력할 수 있었는가? 코드를 잘 입력했다면, 처음 만든 명령단추(CommandButton1)를 클릭할 때에는 TextBox1에 텍스트가 나타나면서 텍스트 상자의 높이가 60으로 변경되고, 나중에 만든 명령 단추(btnResize)를 클릭할 때에는 텍스트 상자의 높이가 원래의 높이로 변경될 것이다.


이번 강의는 여기까지 해두고, 이어질 3강에서는 1강과는 반대로 텍스트 상자에 입력한 텍스트를 엑셀 시트의 특정한 셀에 입력되도록 하는 코드를 짜보도록 한다.

End Sub

//To be continued


덧글

  • 마이즈 2010/08/12 09:47 # 답글

    와우~ 정말 차근차근 조목조목 잘 알려주신다능.
    VBA 전혀 못하는 사람들도 쉽게 배울 수 있을 듯 >_<
  • storm 2010/08/12 11:11 #

    마이즈님 옆동네 회사로 오셨는데 언제 놀러오실거셈? +_+
  • 마이즈 2010/08/16 10:38 #

    일찍 퇴근할 수 있는 날이 오면 놀러가지요 :)
  • storm 2010/08/16 12:10 #

    보통 그러다가 해를 넘기지요 후훗
  • gump 2010/08/12 17:40 # 삭제 답글

    제목이 저속해염 , 유치해염 -_-
    (나무의 복수다!!!! 응? ;; )
  • storm 2010/08/12 18:00 #

    우와아앙~ 나의 검푸짱은 이렇지 않아!!!
  • 저승토끼 2010/08/17 23:38 # 삭제 답글

    이렇게 알려주시니.. 쉽게 이해하겠어요!!
    웬만한 학원강사들 보다 나으신데요~
  • storm 2010/08/18 00:46 #

    학원 강사, 대학 출강도 하고 있습니다. ㅎㅎ
  • 간지오딘 2010/08/24 15:37 # 답글

    안녕하세요~ 올려주시는 강의 열심히 공부하고 있어 참 감사합니다^^
    하다보니까요 F5눌러서 컴파일하고 실행하면 이 프로젝트에서 메크로가 실행할 수 없다고 나오거든요
    보안설정에서 모든메크로 사용 가능으로 하고 해만하나요?
    디지털 서명 만들어서 등록해도 계속 안되네요 ㅠㅠ
  • storm 2010/08/24 15:51 #

    서명 같은건 상관 없구요. VBA 코드가 작성되어 있는 엑셀파일, 즉 매크로가 들어간 엑셀파일은 반드시 파일을 열 때 보안설정에서 매크로 사용을 허용하고 열어야만 정상적으로 동작합니다.
  • 간지오딘 2010/08/24 17:03 #

    칼답변 감사합니다^^ 질문한 내용이 모두 5장에 있는 내용이었네요 ㅎㅎ
  • 간지오딘 2010/08/24 15:44 # 답글

    아 그리구요 코드입력창에서 스톰님 강좌에 보면 예약어는 색이 보라색비스므리하게 나오고 변수는 진한 파란색으로 나오는데
    제꺼는 예약어는 진한 파란색이구 컨트롤 이름이나 속성은 까만색이구 할당해주는 A1이나 60 같은 값도 까만색으로 구분이 안가거든요.. 따로 설정을 해줘야 하는 건가요??
    마지막으로 ㅎㅎ
    컨트롤이 변수랑 같은 개념인거 맞나요?
  • storm 2010/08/24 15:58 #

    5강 보시면 tip 중에 그거 설정하는 방법이 나오니 참고하시구요.
    컨트롤의 이름은 변수처럼 취급됩니다.

    예를 들어 텍스트 상자 하나의 이름 속성을 txt1 라고 하고
    변수명을 txt1 이라고 작성한 다음
    txt1 변수에 어떤 값을 하나 주고
    별도의 명령 단추를 클릭했을 때 다음과 같이 변수가 텍스트 상자에 나타나게 하면 디버깅에서 '수식어 오류'가 발생합니다.

    Private Sub CommandButton1_Click()

    Dim txt1 As Integer
    txt1 = 100

    txt1.text = txt1

    End Sub
  • 의랑 2010/08/31 16:04 # 삭제 답글

    한가한 업무시간에(?) 몰래 공부하는 재미란..

    감사합니다. 2장 끝!! 조금씩 감이 잡혀가요
  • storm 2010/09/01 08:55 #

    헐 업무시간에!!!
  • bonanza 2010/09/01 22:59 # 삭제 답글

    퇴근길에 학습할 수 있게 해 주셔서 감사합니당 ㅎㅎ
  • 감사합니다 2010/09/20 13:52 # 삭제 답글

    감사합니다..^^
    너무 쉽고 재미있어요
  • storm 2010/09/20 14:17 #

    네~ 열심히 공부하세요 :)
  • 에스프가르데 2010/09/23 12:10 # 삭제 답글

    차근차근 알려주시니 아무것도 모르는 저도 이렇게 쉽게 뭔가를 배우는군요 +_+!ㅎ 감사합니다~
  • storm 2010/09/23 14:12 #

    추석연휴인데 공부를 하시는군요 :)
  • 에스프가르데 2010/09/23 15:20 # 삭제

    추석 연휴에라도 공부를 부지런히 해야 부족한 부분을 메울 수 있을 것 같아서요 ^^ㅎ
  • storm 2010/09/23 15:25 #

    그렇죠, 저도 지금 7강 쓰고 있답니다. 몇 시간내로 업데이트 할 수 있을 것 같네요.
  • 호주 2010/11/13 08:53 # 삭제 답글

    명령 버튼을 만들어 실행하려고 하는데요. 매크로 기록하고 저장--> 명령버튼을 개발도구에서 하나 끌어 시트에 만들어 놓고---> 매크로 지정을 하면 된다고 들었는데 저는 않되네요.

    호주라 주변에 물어볼 사람도 없고...답면 주시면 머리숙여 인사드리겠습니다.
  • storm 2010/11/13 11:22 #

    명령 버튼을 어디다 넣으시는 거죠? 유저폼인지 엑셀시트인지...?
    그리고 안된다는게 정확하게 어떻게 안되는 것인지도 좀 알려주세요.
  • nk 2010/12/25 14:23 # 삭제 답글

    완전 쉬운설명임돠...~~

    이렇게 잼잇게 설명해놓은거 계속 보고있으면 소는 누가키워~~
  • storm 2010/12/27 13:43 #

    소는 방목을 하세요
  • 길고양이 2011/06/05 10:21 # 답글

    clear 'ㅅ')/
  • storm 2011/06/05 11:42 #

    미션 보상템은 지정된 NPC에거 가서 받으세요 '- '/
  • 소소 2011/07/13 17:02 # 삭제 답글

    엑셀 파일이 여러개 있는데, 이것을 차례로 합친 통합 파일을 만들고 싶은데, 블로그 지식인 여기저기 다녀서 vba 코드 있길래 해봤는데 안되네요. 혹시, 방법 있으시면 부탁드립니다. 통합 파일은 첫줄부터 하고 싶습니다.....msso@castinfo.co.kr 로 답변 주시면 정말 감사... ^^
  • 토르제노 2011/09/23 20:01 # 삭제 답글

    이예~ 이 거 하니까 꽤 경쾌한(?) 기분이 드네요 ㅋㅋㅋㅋㅋ
    아이 재밌어라 *^^*
    인문대 출신이라 일단 지르고 보는 스톰님의 강의 넙죽넙죽 받아먹고 있습니다.
    앞으로도 잘 부탁드려요~
  • 혁명 2011/12/14 18:36 # 삭제 답글

    와 이거 괜찮네요~ 잘 배우고 있습니다.~ 감사합니다.
  • 스카이워커 2012/05/08 17:13 # 삭제 답글

    오 VBA를 배워보고 싶어서 이렇게 여기 저기 방랑자처럼 배회하다가...

    이렇게 조목조목 쉽게 말씀해주시는 곳을 처음보네요 ^^

    앞으로 게임기획쪽에서 더욱 활용할수있도록 공부많이 할께요 감사합니다.
  • 돌쇠 2012/11/26 03:40 # 답글

    그냥 보고 넘길라다가 재미있고 센스있게 잘쓰셔서 감사의 댓글을 남깁니다 ^^
  • 꾸마로 2013/02/26 06:34 # 삭제 답글

    정말 감사합니다. 덕분에 VBA라는 것에 대한 막연한 어려움(두려움?)을 이겨내고 손을 대보네요..ㅎ
  • 까오송 2019/02/18 15:09 # 삭제 답글

    너무 감사합니다
댓글 입력 영역



통계 위젯 (화이트)

3117
177
502139