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

들어가기 전에

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

//질문 하나

바탕화면의 아이콘을 클릭했을 때 엑셀을 실행치 않고 유저폼을 띄워
VBA를 실행하고 그 결과를 얻고 싶습니다.

엑셀을 실행치 않고 안될시는 유저폼만 보이고 엑셀의 시트는 클릭하지
않는 이상 항시 제목표시줄에 표시되도록 해도 괜찮은데…
방법이 있는지요?

즉 최소한의 입력창으로 결과를 얻고자 합니다.

Q&A란에 이런 질문이 올라왔는데 자주 들러 답변을 주시는 회원 한 분이 아래와 같은 답변을 주셨네요. ^^

안녕하세요?

유저폼이란 것이 엑셀을 실행해야 나타나는 것인데요… 당연히 원하시는 것은
조금 엉터리지요.

간단하게 Application.Visible 속성을 이용해 눈속임을 하세요…
… (중략)…

해서 생각이 난 김에 그 아이디어를 약간 응용해서 Splash Screen을 한번 만들어 보도록 하겠습니다. 오늘 만들어 볼 예제를 다시 한번 보도록 하지요. 강좌 파일을 열었을 때 이미 보셨겠지만 워낙 순식간에 일어난 일이라 잘 못보셨을 지도 모르니까… ^^

이제 확실히 보셨지요? EXCEL이나 Word 등과 같은 프로그램을 처음 실행시킬 때, Main 화면이 뜨기 전에 몇 초 동안 안내문이나 상징적인 화면이 나타나는 경우가 있는데(대부분의 프로그램이 그럴 것입니다) 이러한 것을 Splash Form이라고 부릅니다.

이번 시간에 보여드리는 것은 사실 엄밀하게 말하자면 Splash Screen이라고는 할 수 없습니다. 스플래쉬 스크린은 프로그램이 로딩되기까지 약간의 시간동안 사용자가 지루하지 않도록 하거나 안내정보 등을 보여주는 데에 목적이 있는데 오늘 설명드리는 것은 실제로는 EXCEL은 이미 기동이 된 상태에서 사용자의 눈을 잠시 현혹시켜서 스플래쉬 스크린과 비슷한 것처럼 보이도록 하는 것이기 때문입니다.

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

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

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


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

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

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

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

Splash Screen 만들기

핵심 요약: Splash Screen 만들기

엑셀 창을 숨기고 유저폼을 보여 준 뒤 OnTime으로 폼을 닫고 화면을 원래대로 되돌립니다.

  • 1단계: UserForm_Activate에서 Application.Visible을 False로 지정합니다.
  • 2단계: OnTime으로 10초 뒤 UnloadTheForm 프로시저를 실행합니다.
  • 3단계: UserForm_Terminate에서 Application.Visible을 True로 복원합니다.

Step 1: 유저폼 만들기

(1) VB Editor 상태에서 유저폼을 하나 삽입하고 아래와 같이 필요한 컨트롤들을 삽입합니다.

Book Management System 제목과 홈페이지, E-mail 안내가 들어 있는 Splash Screen 유저폼
아이엑셀러

눈으로 보기에는 Label 컨트롤만 3 ~ 4개 있는 것처럼 보이는데 그것 보다는 좀 복잡합니다. Image 컨트롤이 1개, Label 컨트롤 7개, CommandButton 컨트롤이 1개(이것은 Label 컨트롤 뒤에 숨겨져 있으니까 잘 찾아보세요 ^^) 등 총 9개의 컨트롤이 사용되었습니다. VB Editor로 가서 잘 분해해 보시기 바랍니다.

Step 2: UserForm_Activate 이벤트

(2) 프로젝트 탐색창에서 UserForm1을 오른쪽 마우스 버튼으로 클릭하고 코드 보기 메뉴를 선택합니다. 우측 상단의 이벤트 선택 드롭다운 목록 중에서 UserForm_Activate 이벤트를 선택하고 코드를 작성합니다.

Private Sub UserForm_Activate()
    Dim Msg As String
    Application.Visible = False
    '//Visible 속성을 False로 지정하면 EXCEL이 보이지 않게 됩니다.

    Msg = vbTab & "10초 동안 기다리시거나 <ESC>키를 누르세요"
    Me.lblNotice.Caption = Msg
    Application.OnTime Now + TimeValue("00:00:10"), "UnloadTheForm"
    '//OnTime 메서드를 사용해서 10초 동안 SplashScreen이 나타나도록 설정합니다.
    '//물론 10초가 지나면 UnloadTheForm 이라는 프로시저가 실행이 되지요.

End Sub

Step 3: 홈페이지와 E-mail 레이블 클릭

(3) Shift + <F7>키를 눌러 유저폼 상태로 돌아간 다음, 홈페이지 URL이 있는 Label을 더블클릭하고 아래의 코드를 작성합니다. 이것은 이미 여러 강좌에서 설명드린 것으로 URL을 클릭했을 때 홈페이지에 접속이 되도록 설정하기 위한 것입니다.

Private Sub lblURL_Click()
    Dim strURL As String
    strURL = "http://www.iexceller.com"
    On Error GoTo ET

    ActiveWorkbook.FollowHyperlink Address:=strURL, NewWindow:=True
    Unload Me
    Exit Sub
ET:
    MsgBox "Exceller's KnowledgeBase에 접속이 안됩니다", , "접속 실패//By Exceller"
End Sub

이 코드에 대해서는 VB0088 강좌 등을 참고하시기 바랍니다.

(4) 유저폼으로 돌아가서 이번에는 E-mail 계정이 있는 Label을 더블클릭한 다음 필요한 코드를 작성합니다. 이것도 마찬가지로 VB0088 강좌를 참고하세요.

Private Sub lblEmail_Click()
    Dim strEMail As String
    strEMail = "mailto:exceller@netian.com"
    On Error GoTo ET

    ActiveWorkbook.FollowHyperlink Address:=strEMail, NewWindow:=True
    Exit Sub
ET:
    MsgBox "메일을 보낼 수 없습니다", , "전송 실패//By Exceller"
End Sub

Step 4: 닫기 방지와 Esc 키 처리

(5) 유저폼 우측 상단의 X버튼을 클릭했을 때 작동이 되지 않도록 하기 위한 코드를 만듭니다. 이것은 꼭 있어야 할 필요는 없지만 사용자가 일정 시간동안 기다리거나 Esc키를 클릭해야만 다음 과정으로 넘어가도록 하기 위해서입니다.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim Msg As String
    If CloseMode = vbFormControlMenu Then
        MsgBox "이 버튼은 사용하실 수 없습니다"
        Cancel = True
    End If
End Sub

그러고 보니 이 코드도 언젠가 소개해 드린 것 같은데… 그렇군요! 위의 코드가 잘 이해되지 않는 분은 VB0061 강좌를 살펴보시도록 하세요.

Esc 키로 폼을 닫을 수 있도록 Label 컨트롤 뒤에 숨겨 둔 CommandButton(이름은 cmdClose로 가정합니다)의 Cancel 속성을 True로 지정하고 아래와 같이 작성합니다.

Private Sub cmdClose_Click()
    Unload Me
End Sub

Step 5: UnloadTheForm과 UserForm_Terminate

(6) (2) 번에서, 10초가 경과했을 경우 UnloadTheForm 프로시저를 호출하도록 지정 했으므로 이 프로시저를 작성합니다. 이것은 모듈시트를 한장 삽입하고 거기에 작성합니다.

Sub UnloadTheForm()
    Unload UserForm1
End Sub

이 프로시저를 호출하는 유저폼 종료 이벤트도 작성합니다.

(6) 다시 프로젝트 탐색창의 UserForm1을 오른쪽 마우스로 클릭하고 코드 보기 메뉴를 선택합니다. UserForm_Terminate 이벤트, 즉 유저폼이 종료될 때 실행되는 코드를 아래와 같이 작성합니다. (2) 과정에서 Application.Visible 속성을 False로 지정해서 EXCEL 화면이 보이지 않도록 했으니까 이것을 다시 원상태로 되돌려 주어야 겠지요? 화면이나 메뉴 등에 어떤 변경을 가했으면 종료할 때에는 반드시 원상태로 되돌려 놓는 것이 좋습니다.

Private Sub UserForm_Terminate()
    Application.Visible = True
End Sub

Step 6: 파일을 열 때 폼 보여주기

마지막으로 ThisWorkbook 모듈에 파일을 열 때 폼이 나타나도록 작성합니다.

Private Sub Workbook_Open()
    UserForm1.Show
End Sub

Application.Visible = False로 엑셀 창을 숨기는 방식은 여러 통합 문서를 함께 사용하는 환경에서는 사용자에게 혼란을 줄 수 있고, 폼을 닫기 전에 오류로 중단되면 엑셀 창이 숨겨진 채로 남을 수 있습니다. 이런 경우 VB 편집기의 직접 실행 창에서 Application.Visible = True를 실행하면 창이 다시 나타납니다.

마무리

오늘은 여기까지 하도록 합니다.

다음 시간에…

정리 — Splash Screen 핵심

구분 사용한 코드 역할
엑셀 창 숨기기 Application.Visible = False 엑셀 화면 감추기
시간 예약 Application.OnTime Now + TimeValue("00:00:10") 10초 뒤 폼 닫기
닫기 방지 UserForm_QueryClose X 버튼 차단
하이퍼링크 FollowHyperlink 홈페이지, 메일 연결
복원 Application.Visible = True 종료 시 화면 복원

자주 묻는 질문 (FAQ)

Q1. 엑셀을 실행하지 않고 유저폼만 보여 줄 수 있나요?

유저폼은 엑셀 안에서만 동작하지만 Application.Visible을 False로 지정하면 엑셀 창을 숨겨 폼만 보이는 것처럼 할 수 있습니다.

Q2. 일정 시간 뒤 폼을 자동으로 닫으려면?

Application.OnTime 메서드로 원하는 시간 뒤에 폼을 닫는 프로시저를 실행하도록 예약합니다.

Q3. 폼의 X 버튼을 막으려면?

UserForm_QueryClose 이벤트에서 CloseMode가 vbFormControlMenu일 때 Cancel을 True로 지정합니다.

마치며

엑셀 창을 잠시 숨기고 OnTime으로 폼을 닫는 간단한 방법으로 Splash Screen 같은 시작 화면을 만들 수 있습니다.