Exceller Home > VBA 강좌 > VBA 입문강좌

Exceller's VBA 입문강좌

- 최초 작성일 : 2008-05-27
- 최종 수정일 : 2008-05-27
- 강좌 읽음수 : 27,163회
- 자료 작성자 :


- 강좌 제목 : 엑셀 2007에서 도구 모음Toolbar 흉내내기

미국산 쇠고기 수입 문제로 온 나라가 벌집 쑤셔놓은 듯 어수선합니다. "수입을 하더라도 안먹으면 그만"이라는 어느 분의 말에 아연실색하지 않을 수 없습니다. 문제의 본질은 쇠고기를 수입하느냐 마느냐, 혹은 그것을 먹느냐 마느냐가 아닌데 말입니다.

- 대한민국의 주권은 국민에게 있고 모든 권력은 국민으로부터 나온다(헌법 1조 2항)
- 공무원은 국민전체에 대한 봉사자이며 국민에 대하여 책임을 진다(헌법 7조 1항)

이런 오래된 헌법조문을 굳이 상기할 필요도 없을 듯 합니다. 설령 정부가 하는 일이 100퍼센트 옳은 것이라 해도 국민이 싫다고 하면 설득과 커뮤니케이션을 통해 이해시키는 노력을 해야지, 이 길이 옳은 길이니까 무조건 따라오라는 식으로 하는 것은 올바른 자세가 아니라고 생각됩니다. 이럴 때 일수록 열 받지 말고 감정을 잘 조절하며 살아야겠습니다.

감정을 창조하는 연출가가 돼라.
나는 당신이 감정에 끌려 다니지 말고,
감정을 능수능란하게 다루고 즐기는 연출가가 되기를 바란다.
감정의 주인으로서 춤을 추듯이 감정을 타고 즐겨라.
감정은 운명이 아니다. 내가 스스로 창조하는 것이다.
원하는 감정을 스스로 창조하고,
그것을 지속적으로 유지할 수 있다면
당신은 인생의 주인공이 될 수 있을 것이다.

<뇌파진동>, 이승헌

감정에 이끌려 다니지 않고 감정의 연출가가 되기 위해서는 "자극과 반응 사이의 간격" 유지가 무엇보다 중요합니다. 외부의 이벤트는 내가 어찌할 수 없지만, 내부의 반응은 내가 제어할 수 있으니까요.


예제 파일 내려받기


Exceller : 엑셀 2007 이전 버전에서는 '도구 모음(Toolbar)'을 사용자화 하는 것이 아주 손쉬웠습니다.

박담당 : 그 말은 뒤집어 말하자면... 엑셀 2007에서는 별로 손쉽지 않다는 뜻...?

Exceller : (뜻밖의 예리한 반응에 놀랐으나 안그런척 하며)...바로 그렇습니다! 눈치가 아주 빠르시군요. 절에 가서도 새우젓을 얻어드실 자격이 충분합니다. ^^;

자, 그러면 눈치 빠른 여러분에게 묻겠습니다. 엑셀 2007 이전 버전에서는 '도구 모음'을 어떻게 만들었는지 기억나시나요?...(잠잠)... 안나시나요?

  • '도구-사용자 지정' 메뉴를 선택합니다(혹은 도구 모음의 빈 영역을 마우스 오른쪽 버튼으로 클릭하고 '사용자 지정'을 선택해도 됩니다).

  • '사용자 지정' 대화상자에서 '새 도구 모음' 버튼을 클릭합니다.

  • '새 도구 모음' 대화상자에서 도구 모음의 이름을 입력하고 '확인' 버튼을 클릭하면 사용자 지정 도구 모음이 화면에 나타나는데, 적당한 아이콘을 여기로 끌어다 놓습니다(Drag & Drop).

대략 이런 순서로 했더랬습니다. 그런데 엑셀 2007에서는 모든 도구 모음이 '추가 기능' 탭의 '사용자 지정 도구 모음' 그룹에 표시가 됩니다. 하지만 이 도구 모음을 다른 곳으로 옮기거나 화면에 떠 있도록(영어로 floating) 할 수는 없습니다.

이번 강좌에서는 도구 모음의 편리한 점 중 하나인 이동성, 다시 말해서 화면 아무 곳으로나 옮겨다 놓을 수 있도록 해 보겠습니다.

완성 예

위에서 보신 것처럼, 워크시트 내에 도구 모음이 표시되며, 아이콘을 클릭하면 그와 연결된 프로시저가 실행됩니다. 이것은 과연 어떻게 만든 것일까요?

유저폼에 이미지 컨트롤 삽입하기

눈치를 챈 분도 계시겠습니다만(절에서 새우젓 얻어드실 그 분), 위에서 도구 모음 비스무리하게 생긴 것은 사실은 유저폼UserForm과 이미지Image 컨트롤을 이용하여 절묘하게 위장(?)을 한 것입니다.  

VB Editor 상태에서 유저폼을 하나 삽입하고 '도구 상자'에 있는 '이미지' 컨트롤을 필요한 만큼 삽입합니다. 그런 다음, 이미지 컨트롤의 Picture 속성을 이용하여 적당한 이미지를 지정합니다.

이미지 컨트롤에 그림 쉽게 붙여넣는 방법

1) 워크시트 상태에서 '삽입' 탭의 '일러스트레이션' 그룹에 있는 '그림'을 클릭합니다.

2) '그림 삽입' 대화상자가 나타나는데, 적당한 이미지들을 워크시트에 삽입합니다.

3) 삽입된 이미지를 선택하고 '복사'합니다.

4) VB Editor로 가서 그림을 삽입할 Image 컨트롤을 선택합니다. '속성' 창 중간쯤에 있는 Picture 속성을 클릭해 준 다음 <Ctrl+V> 키를 누르면 이미지 컨트롤에 그림이 삽입됩니다.

유저폼의 빈 공간을 더블 클릭하고 유저폼의 초기화 이벤트 프로시저를 작성합니다. Image 컨트롤의 ControlTipText 속성, 즉 마우스를 이미지로 가져갔을 때 화면에 표시될 간단한 도움말을 설정합니다.

Private Sub UserForm_Initialize()
    Dim intControl As Integer
    Dim i As Integer
    Dim ctlControl As Control
    intControl = Me.Controls.Count

    For Each ctlControl In Me.Controls
        i = i + 1

        If TypeOf ctlControl Is msforms.Image Then
            ctlControl.ControlTipText = i & "번 Macro를 실행합니다!"
        End If
    Next ctlControl
End Sub

이벤트 핸들러 프로시저 작성하기

이미지를 클릭하면 발생하는 Click 이벤트 핸들러 프로시저를 각각 작성합니다. ClickButton이라는 외부 프로시저를 실행하는데 그냥 실행하지 않고 1, 2, 3, ... 등과 같은 값을 함께 넘겨주는군요. ClickButton 프로시저의 내용은 뒤에서 다룹니다.

이벤트 프로시저 선택 상자를 이용하여 각 이미지 컨트롤별로 MouseMove 이벤트 핸들러 프로시저를 작성합니다. MouseMove는 마우스 포인터를 해당 오브젝트로 가져갔을 때 발생하는 이벤트입니다. 얼핏보면 대단히 복잡해 보이지만, 잘 뜯어보면 동일한 패턴이 계속 반복됨을 알 수 있습니다. 단지 이미지 컨트롤의 번호만 바뀔 따름입니다.

외부 프로시저 작성하기

이벤트 프로시저에서 호출한 2개의 외부 프로시저를 작성합니다. ResetButton은 마우스 포인터가 이미지를 떠났을 때, 그 이미지에 적용되었던 SpecialEffect 속성값을 원래 상태로 되돌려주기 위한 프로시저이고, ClickButton은 사용자가 이미지 컨트롤를 클릭했을 때 몇번째 것이 눌려졌는지를 알려주는 프로시저입니다. XXX라는 매개 변수Parameter를 함께 실행하는 점에 유의하시기 바랍니다.

Sub ResetButton()
    Dim ctlControl As Control

    For Each ctlControl In UserForm1.Controls
        ctlControl.SpecialEffect = fmSpecialEffectFlat
    Next ctlControl
End Sub

Sub ClickButton(XXX)
    MsgBox XXX & "번째 아이콘을 클릭하셨습니다!", , "www.iExceller.com"
End Sub

끝으로 작성한 유저폼을 화면에 띄우기 위한 프로시저를 작성합니다. 유저폼이 떠 있는 상태에서도 다른 작업이 가능하도록 하기 위해 모덜리스 대화상자를 표시합니다. 유저폼을 모덜리스 형태로 띄우는 것은 아주 간단해서, Show 메서드 뒤에 vbModeless라는 유저폼 상수Constants를 붙여주기만 하면 됩니다.

UserForm1.Show vbModeless

상수 대신에 값을 직접 입력하여 다음과 같이 표현할 수도 있습니다.

UserForm1.Show 0

대화상자는 크게 모달 대화상자Modal dialog box와 모덜리스 대화상자Modeless dialog box로 나눌 수 있습니다. 대화상자가 뜬 상태에서는 "확인"이나 "닫기" 버튼 등을 눌러서 대화상자를 닫기 전까지는 다른 작업을 할 수 없는 대화상자를 Modal dialog box라고 하고(예를 들면 '셀 서식' 대화상자), '피벗 테이블 만들기' 대화상자처럼 대화상자가 화면에 떠 있더라도 다른 작업을 할 수 있는 경우에는 모덜리스 대화상자라고 부릅니다

오늘 강좌는 이쯤에서 접습니다. 휘리릭~~


Previous

Next

Copyright ⓒ 2008 아이엑셀러 닷컴. All rights reserved.