• 최초 작성일: 2001-03-08
  • 최종 수정일: 2026-09-30
  • 조회수: 10 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: Animation Button 만들기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

이번 시간에도 게시판에 올라온 질문 하나를 살펴봅니다.

전 엑셀을 공부하는 학생인데요… 한 가지 의문점이 생겨서요…
웹 서핑을 하다보면 자주 보게 되는데 버튼 위에 마우스를 가져가면 버튼의
색깔이 변하는 사이트가 가끔 보이는데 이런 것도 엑셀에서 가능한지요?

제가 여러 사이트를 돌아다녀 봤는데 그런 방법에 대해 설명되어 있는 곳은
아직 보지 못했습니다.
과연 가능한가요?

이런 황당(?)한 질문으로 Exceller를 당황스럽게 만드는 분이 간혹 계십니다. ^^ 각 랭귀지 또는 소프트웨어는 자기 자신만의 전공분야가 있습니다. 그림을 그릴려면 포토샵이나 페인트 샵 같은 그래픽 유틸리티를 사용하고, 도면이나 약도 등을 작성하고자 한다면 AutoCAD나 VISIO 등을 사용하며, 방대한 양의 데이터를 관리하고자 한다면 ACCESS나 Oracle, SyBase 같은 데이터베이스 프로그램을 사용합니다.

이미지 파일을 만드는데 EXCEL이나 워드를 Tool로 사용하는 (웹)디자이너가 과연 있을까요? 워드를 사용해서 복잡한 설계도면을 작성하는 건축 설계사는 과연 있을까요?

아마도 상태가 아주 안좋은 설계사가 아닌담에야 없을 것입니다. ^^ 그렇다면 EXCEL은 어떤 분야에서 특기를 가지고 있을까요? 여러 우수한 점 중에서도 단연 돋보이는 것이 탁월한 데이터 가공 및 분석능력 이라 할 수 있습니다. 따라서 그 능력을 십분 발휘할 수 있는 곳에 사용을 하여야 할 것입니다.

위의 질문 내용도 약간 황당하기는 하지만 일단 답변은 드려야겠고.. 또 한편으로 생각해 보면 잘만 활용하면 아주 재미있는 것을 만들 수도 있겠다 싶어 한번 만들어 보도록 하겠습니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

Animation Button 만들기

핵심 요약: 애니메이션 버튼

컨트롤 도구 상자의 명령 단추 이벤트에서 속성을 바꾸면 마우스 상태에 따라 색상과 그림이 달라지는 버튼을 만들 수 있습니다.

  • 1단계: 양식 도구모음이 아닌 컨트롤 도구 상자의 명령 단추를 사용합니다.
  • 2단계: GotFocus와 LostFocus 이벤트에서 Caption, BackColor, ForeColor를 지정합니다.
  • 3단계: MouseMove 이벤트와 Static 변수로 그림을 번갈아 불러옵니다.

Step 1: 컨트롤 도구 상자의 버튼 만들기

버튼에 대해 질문을 하셨으니 먼저 버튼을 하나 만듭니다. 이벤트를 사용할 예정이므로 양식 도구모음의 버튼이 아닌, 컨트롤 도구모음의 그것을 사용해서 버튼을 하나 그립니다.

자 이제 한번은 이 버튼 내부와 외부를 번갈아 가며 눌러 보세요. 버튼 자체를 클릭할 때와 버튼 바깥의 셀을 클릭할 때, 버튼의 캡션이 바뀌지요? 버튼 오브젝트에도 여러 가지 이벤트가 발생할 수 있습니다. 세어 보니까 버튼 개체에는 KeyDown, KeyPress, KeyUp, MouseDown, MouseMove, MouseUp 등 총 13개의 이벤트가 발생할 수 있군요.

코드 자체는 아주 간단합니다. btnFocusTest라는 버튼의 GotFocus라는 이벤트와 LostFocus 이벤트가 발생했을 경우 Caption 속성을 지정해 주고 버튼의 색깔을 서로 다른 것으로 지정해 준 것 밖에 없습니다. GotFocus와 LostFocus 이벤트가 어떤 것인지는 설명을 드리지 않아도 되겠지요?

Step 2: GotFocus와 LostFocus 이벤트

Private Sub btnFocusTest_GotFocus()
    With btnFocusTest
        .Caption = "Welcome!!!"
        .BackColor = RGB(255, 0, 0)
        .ForeColor = RGB(255, 255, 255)
    End With
End Sub

Private Sub btnFocusTest_LostFocus()
    With btnFocusTest
        .Caption = "You've Gone!!!"
        .BackColor = RGB(0, 100, 255)
        .ForeColor = RGB(255, 255, 0)
    End With
End Sub

Step 3: 마우스 포인터 위치에 따라 그림 바꾸기

이상의 것들을 잘 응용하면 원하는 것을 만들 수 있습니다. 아래의 그림(사실은 버튼 오브젝트 위에 그림을 입혀놓은 것입니다)을 보세요. 그림 위에 마우스 포인터를 올렸다가 내렸다가 몇 번 반복해 보세요.

(PC에 따라 버튼 위에 약 1~2초 정도 포인터를 올려 두어야 하는 경우도 있습니다)

이 페이지에는 예제에서 사용한 그림 파일(Bathers.bmp, 소녀.gif)이 포함되어 있지 않습니다. 가지고 계신 아무 그림 파일이나 같은 이름으로 통합 문서와 같은 폴더에 두고 사용해 보시기 바랍니다.

마우스가 버튼 위에 있을 때와 버튼 밖에 있을 때, 서로 다른 그림이 표시되지요? (야한 그림을 사용했다고 뭐라 그러는 분은 없겠지? ^^ 이것은 외설 작품이 아니라 아니라 예전에도 한번 보여드렸지만 르노와르의 작품입니다. 작품명이 목욕하는 처녀들이었던가 뭐였든가…)

그건 그렇고… 코드를 보도록 하지요.

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, _
    ByVal Y As Single)
    Static blnOK As Boolean
    '//위의 예제들과는 달리 MouseMove라는 이벤트를 사용해 보았습니다.
    '//그리고 blnOK라는 Static 변수, 즉 정적 변수를 하나 선언해 주었습니다.
    '//이것은 프로시저를 재실행하더라도 기존 값을 그대로 지니고 있도록 하기 위한 것입니다.
    '//"그러면 기존 값을 그대로 지녀서 뭐하는데 써먹나요?"

    '//아주 좋은 질문입니다! ^^ 버튼 위에 마우스 포인터가 놓여져 있는지 아닌지를 어떻게
    '//판단할 수 있을까요? 사람 같으면야 눈으로 보면 되지만 컴퓨터(EXCEL)는 눈이 없지요?
    '//그러므로 눈을 대신해서 표시를 해 주기 위한 무언가가 있어야 하겠는데, 바로 그 역할을
    '//담당하는 변수입니다.

    On Error GoTo ET
    '//버튼 위에 마우스 포인터가 놓여 있느냐 아니냐에 따라 서로 다른 그림을 Load합니다.

    With CommandButton1
        If blnOK Then
            .Picture = LoadPicture(ThisWorkbook.Path & "\소녀.gif")
        Else
            .Picture = LoadPicture(ThisWorkbook.Path & "\Bathers.bmp")
        End If
    End With
    blnOK = Not blnOK

ET:
End Sub

마무리

어려운 부분은 하나도 없을 것입니다. 여러 가지로 응용을 해 보시고 재미있는 것을 만드신 분은 알려주시기 바랍니다. 보내주시는 파일은 홈페이지에 등록해 드리겠습니다.

오늘은 여기까지…

정리 — 애니메이션 버튼 핵심

구분 사용한 코드 역할
포커스 얻음 btnFocusTest_GotFocus 빨간 배경과 환영 문구
포커스 잃음 btnFocusTest_LostFocus 파란 배경과 작별 문구
마우스 이동 CommandButton1_MouseMove 그림 번갈아 표시
상태 기억 Static blnOK As Boolean 이전 상태 보관
그림 불러오기 .Picture = LoadPicture(경로) 버튼에 그림 표시

자주 묻는 질문 (FAQ)

Q1. 버튼 위에 마우스를 올리면 모양이 바뀌게 할 수 있나요?

컨트롤 도구 상자의 명령 단추에 MouseMove 이벤트 프로시저를 작성해 색이나 그림을 바꾸면 됩니다.

Q2. Static 변수는 무엇인가요?

프로시저가 끝나도 값을 그대로 유지하는 변수로, 이전 상태를 기억해 두는 데 사용합니다.

Q3. 양식 도구모음의 버튼과 컨트롤 도구 상자의 버튼은 어떻게 다른가요?

컨트롤 도구 상자의 버튼은 다양한 이벤트를 가지므로 이벤트 프로시저를 작성해 사용할 수 있습니다.

마치며

명령 단추의 이벤트를 활용하면 마우스 상태에 따라 모양이 바뀌는 재미있는 버튼도 만들 수 있습니다.