• 최초 작성일: 2002-04-30
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 엑셀 캡션 없애기

들어가기 전에

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

지난 시간에는 API 함수로 유저폼의 캡션을 없앴는데, 이번에는 이것을 조금 더 응용해 보겠습니다.

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

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

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


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

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

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

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

엑셀 캡션 없애기

핵심 요약: 엑셀 캡션과 메뉴까지 없애기

전체 화면 보기만으로는 남는 상단 메뉴를 API 함수로 엑셀 창의 캡션 스타일을 제거하고 DisplayFullScreen을 함께 사용하여 없앨 수 있습니다.

  • 1단계: 사용자 정의 변수 RECT와 API 함수를 선언합니다.
  • 2단계: 엑셀 창의 핸들을 찾아 WS_CAPTION 스타일을 제거하거나 복원합니다.
  • 3단계: MoveWindow, SetWindowPos, DisplayFullScreen으로 화면을 정리합니다.

Step 1: 전체 화면 보기의 한계

도구 모음이나 수식 표시줄, 상태 표시줄, 시트 탭 등을 화면에서 사라지도록 하여 워크시트 작업 공간을 최대화 하려면 '보기-전체 화면' 메뉴를 선택하면 됩니다.

그러나 전체 화면 보기를 해도 상단의 메뉴는 그대로 남아 있게 됩니다. '보기-전체 화면' 메뉴를 눌러 직접 확인해 보세요. 확인해 보셨으면 다시 '보기-전체 화면'을 누르면 원래 상태로 되돌아 옵니다.

그러나 위 메뉴가 그대로 남는 것이 아쉽다면 API 함수를 이용해 엑셀 창 자체의 캡션까지 제거할 수 있습니다. 코드를 실행하면 엑셀의 캡션은 물론 한 줄 남아 있던 메뉴도 제거됩니다. 원래 상태로 되돌리려면 같은 코드를 한 번 더 실행하면 됩니다.

Step 2: 선언부

지난 시간의 코드와 거의 비슷합니다. 먼저 사용자 정의 변수와 API 함수, 상수를 선언합니다.

Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

#If VBA7 Then
    Declare PtrSafe Function GetWindowRect Lib "user32" _
        (ByVal hWnd As LongPtr, lpRect As RECT) As Long
    Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As LongPtr, ByVal nIndex As Long) As Long
    Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare PtrSafe Function GetSystemMetrics Lib "user32" _
        (ByVal nIndex As Long) As Long
    Declare PtrSafe Function MoveWindow Lib "user32" _
        (ByVal hWnd As LongPtr, ByVal x As Long, ByVal y As Long, _
        ByVal nWidth As Long, ByVal hHeight As Long, ByVal bRepaint As Long) As Long
    Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
        ByVal hWndInsertAfter As LongPtr, ByVal x As Long, ByVal y As Long, _
        ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
#Else
    Declare Function GetWindowRect Lib "user32" _
        (ByVal hWnd As Long, lpRect As RECT) As Long
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function GetSystemMetrics Lib "user32" _
        (ByVal nIndex As Long) As Long
    Declare Function MoveWindow Lib "user32" _
        (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, _
        ByVal nWidth As Long, ByVal hHeight As Long, ByVal bRepaint As Long) As Long
    Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
        ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
        ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
#End If

Public Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000
Public Const SM_CYCAPTION = 4
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

Step 3: HideAndShowExcelCaption 프로시저

Sub HideAndShowExcelCaption()
    Dim lngOld As Long
    Dim lngNew As Long
    Dim rct As RECT
    #If VBA7 Then
        Dim lngHwnd As LongPtr
    #Else
        Dim lngHwnd As Long
    #End If
    Dim lngX As Long
    Dim lngY As Long
    Dim lngSt As Long
    Dim lngFlags As Long
    Static blnOK As Boolean
    Application.DisplayFullScreen = False
    lngHwnd = FindWindow(vbNullString, Application.Caption)
    lngOld = GetWindowLong(lngHwnd, GWL_STYLE)
    blnOK = Not blnOK

    If blnOK Then
    ' blnOK 변수는 캡션을 보여 주었다가 사라지게 하였다가 번갈아가며 설정하기 위한
    ' 역할을 수행합니다.

    ' 이하의 코드는 지난 시간에 알려드린 것과 동일합니다.

        lngNew = lngOld And Not WS_CAPTION
    Else
        lngNew = lngOld Or WS_CAPTION
    End If

    lngOld = SetWindowLong(lngHwnd, GWL_STYLE, lngNew)
    GetWindowRect lngHwnd, rct
    lngX = rct.Right - rct.Left

    If blnOK Then
        lngY = rct.Bottom - rct.Top - GetSystemMetrics(SM_CYCAPTION)
    Else
        lngY = rct.Bottom - rct.Top + GetSystemMetrics(SM_CYCAPTION)
    End If

    MoveWindow lngHwnd, rct.Left, rct.Top, lngX, lngY, True
    If blnOK Then
        lngSt = SetWindowPos(lngHwnd, HWND_NOTOPMOST, 0, 0, rct.Right, rct.Bottom, lngFlags)
        Application.DisplayFullScreen = True
        ' 화면 크기를 '전체 화면' 모드로 설정하고…

        MsgBox "엑셀 캡션 및 메뉴까지 제거하여 작업 공간을 최대로 하였습니다." & vbCr _
            & "Click Me!!! 버튼을 다시 누르시면 원래 상태로 되돌아갑니다", , "VB0156//www.iExceller.com"

    End If
End Sub

blnOK 변수가 캡션을 없앴다가 다시 보여 주는 동작을 번갈아 하도록 합니다. 캡션을 제거한 경우에는 SetWindowPos로 창 위치를 정리하고 Application.DisplayFullScreen = True로 전체 화면 모드를 설정하여 메뉴까지 없앱니다.

참고: 64비트 엑셀에서는 Declare 문에 PtrSafe와 LongPtr 형식이 필요하므로 조건부 컴파일로 함께 선언하였습니다. 또한 리본 메뉴를 사용하는 엑셀 2007 이후 버전에서는 창 상단의 구성이 달라 실행 결과가 예전 버전과 다르게 보일 수 있으니 문서를 저장한 뒤 시험해 보시기 바랍니다.

다음 시간에 또…

정리 — 엑셀 캡션 제거 핵심

구분 사용한 코드 역할
핸들 찾기 FindWindow(vbNullString, Application.Caption) 엑셀 창 핸들
캡션 제거 lngOld And Not WS_CAPTION 스타일에서 캡션 제외
캡션 복원 lngOld Or WS_CAPTION 스타일에 캡션 추가
크기 조정 MoveWindow, GetSystemMetrics 캡션 높이 반영
전체 화면 Application.DisplayFullScreen = True 메뉴까지 제거

자주 묻는 질문 (FAQ)

Q1. 전체 화면 보기만으로는 무엇이 남나요?

도구 모음, 수식 표시줄, 상태 표시줄은 사라지지만 상단의 메뉴 한 줄은 그대로 남습니다.

Q2. 원래 상태로 돌아오려면 어떻게 하나요?

blnOK 변수가 실행할 때마다 번갈아 바뀌므로 같은 프로시저를 한 번 더 실행하면 원래 상태로 되돌아옵니다.

Q3. 지난 시간의 유저폼 코드와 무엇이 다른가요?

대상이 유저폼이 아니라 엑셀 애플리케이션 창이며, 캡션 제거 후 DisplayFullScreen을 True로 지정해 메뉴까지 제거한다는 점이 다릅니다.

마치며

API 함수를 함께 사용하면 전체 화면 보기로도 남던 메뉴까지 없애 작업 공간을 최대한 넓힐 수 있습니다.