- 최초 작성일: 2001-03-05
- 최종 수정일: 2026-09-30
- 조회수: 9 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: Splash Screen 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
//질문 하나
바탕화면의 아이콘을 클릭했을 때 엑셀을 실행치 않고 유저폼을 띄워
VBA를 실행하고 그 결과를 얻고 싶습니다.
엑셀을 실행치 않고 안될시는 유저폼만 보이고 엑셀의 시트는 클릭하지
않는 이상 항시 제목표시줄에 표시되도록 해도 괜찮은데…
방법이 있는지요?
즉 최소한의 입력창으로 결과를 얻고자 합니다.
Q&A란에 이런 질문이 올라왔는데 자주 들러 답변을 주시는 회원 한 분이 아래와 같은 답변을 주셨네요. ^^
안녕하세요?
유저폼이란 것이 엑셀을 실행해야 나타나는 것인데요… 당연히 원하시는 것은
조금 엉터리지요.
간단하게 Application.Visible 속성을 이용해 눈속임을 하세요…
… (중략)…
해서 생각이 난 김에 그 아이디어를 약간 응용해서 Splash Screen을 한번 만들어 보도록 하겠습니다. 오늘 만들어 볼 예제를 다시 한번 보도록 하지요. 강좌 파일을 열었을 때 이미 보셨겠지만 워낙 순식간에 일어난 일이라 잘 못보셨을 지도 모르니까… ^^
이제 확실히 보셨지요? EXCEL이나 Word 등과 같은 프로그램을 처음 실행시킬 때, Main 화면이 뜨기 전에 몇 초 동안 안내문이나 상징적인 화면이 나타나는 경우가 있는데(대부분의 프로그램이 그럴 것입니다) 이러한 것을 Splash Form이라고 부릅니다.
이번 시간에 보여드리는 것은 사실 엄밀하게 말하자면 Splash Screen이라고는 할 수 없습니다. 스플래쉬 스크린은 프로그램이 로딩되기까지 약간의 시간동안 사용자가 지루하지 않도록 하거나 안내정보 등을 보여주는 데에 목적이 있는데 오늘 설명드리는 것은 실제로는 EXCEL은 이미 기동이 된 상태에서 사용자의 눈을 잠시 현혹시켜서 스플래쉬 스크린과 비슷한 것처럼 보이도록 하는 것이기 때문입니다.
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 상태에서 유저폼을 하나 삽입하고 아래와 같이 필요한 컨트롤들을 삽입합니다.
눈으로 보기에는 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 같은 시작 화면을 만들 수 있습니다.