본문 바로가기
#4 VBA/#4.1 환경설정 및 기본개념

Application 개체 살펴보기 완벽 정리

by 이세계의엑셀 2024. 12. 29.
반응형

Application 개체 살펴보기 과정을 익히면 VBA 코드에서 엑셀 전역 환경을 폭넓게 제어할 수 있다. 화면 갱신 중지, 경고 메시지 억제, 계산 방식 설정 등 핵심 속성을 구체적 예시와 함께 살펴보자.

VBA에서 Application 개체는 엑셀(Excel) 전체 동작과 관련된 전역 설정을 관리하는 강력한 수단이다. 일반적으로 엑셀 창(윈도우)의 UI나 연산 방식 등 폭넓은 부분에 관여하며, 일부 설정은 대규모 매크로 최적화나 사용자 경험 개선에 직접적으로 도움이 된다. 여기서는 Application 개체 살펴보기와 함께 자주 쓰이는 속성·메서드를 예시와 함께 정리해보겠다.

반응형

Application 개체의 주요 기능

1. 화면 갱신(ScreenUpdating) 제어

  • 화면 갱신 중지
    매크로가 데이터를 대량으로 처리하거나 시트를 이동·삭제할 때 매번 화면이 깜빡이면, 사용자 경험이 떨어지고 처리 속도도 저하된다.
    Application.ScreenUpdating = False
    ' 대량 작업
    Application.ScreenUpdating = True
    • Application.ScreenUpdating = False로 설정하면 엑셀이 중간 과정을 화면에 반영하지 않는다.
    • 모든 작업이 끝난 뒤 = True로 돌려놓으면 다시 화면 표시가 정상화된다.

2. 경고 메시지(DisplayAlerts) 억제

  • 팝업 경고 창 비활성화
    파일 덮어쓰기나 시트 삭제 시 “정말 삭제하시겠습니까?” 같은 메시지가 뜨는 걸 억제할 수 있다.
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs "C:\Test\Overwrite.xlsm"
    Application.DisplayAlerts = True
    • 이 설정이 꺼져 있는 동안에는 자동으로 기본 동작(예: ‘예’를 선택)으로 진행하므로, 작업 완료 후 다시 켜줘야 한다.

 

3. 계산 모드(Calculation) 설정

  • 자동 계산(Automatic) vs. 수동 계산(Manual)
    대규모 수식이 있는 통합 문서에서, 매크로 중간에 반복 계산이 발생하면 속도가 떨어진다.
    Application.Calculation = xlCalculationManual
    ' 데이터 대량 편집
    Application.Calculation = xlCalculationAutomatic
    • 수동 모드로 전환해 일괄 처리 후, 마지막에 한 번에 계산하게 하면 성능이 향상된다.
    • 단, 수동 상태를 해제하지 않으면 사용자가 수동으로 F9 등을 눌러야 하므로 잊지 않고 원복해줘야 한다.

4. 화면 업데이트 및 이벤트 처리

  • EnableEvents: 워크시트나 워크북 이벤트가 실행되는지 여부를 지정
    • 대규모 작업 중 시트 이벤트가 불필요하게 자꾸 트리거될 경우, 이벤트를 꺼놓고 마지막에 다시 켜는 방식이 자주 쓰인다.
  • Application.EnableEvents = False ' 이벤트 실행 방지 (Worksheet_Change 등) ' ... Application.EnableEvents = True
  • Cursor 속성: 마우스 커서 상태를 변경(xlDefault, xlWait, xlNorthwestArrow 등)
    • 사용자가 작업이 진행 중임을 시각적으로 알 수 있도록 대기 커서(모래시계 등)를 표시할 수 있다.
  • Application.Cursor = xlWait ' 길게 걸리는 작업 Application.Cursor = xlDefault

 

Application 개체 살펴보기: 속성(Property)

1. Application.Version

  • 엑셀 버전 정보를 문자열로 반환한다. 예: “16.0” (Office 365/2019 등)
  • 매크로에서 “이 버전 이상이어야 지원되는 기능”을 체크할 때 쓰일 수 있다.
    If Val(Application.Version) < 16 Then
        MsgBox "이 기능은 Excel 2016 이상에서만 동작합니다."
    End If

2. Application.HWnd

  • 엑셀 창(Window)의 핸들(HWnd)을 나타낸다.
  • 일부 Windows API 호출 시 엑셀 창 핸들이 필요할 때 참조하기도 한다.

3. Application.Path, Application.DefaultFilePath

  • Application.Path: 엑셀이 설치된 폴더 경로(C:\Program Files\Microsoft Office\Root\Office16 등)를 반환
  • Application.DefaultFilePath: 엑셀이 기본적으로 파일을 열거나 저장할 때 사용하는 폴더 경로

4. Application.Name

  • 현재 실행 중인 애플리케이션 이름, 일반적으로 “Microsoft Excel”을 반환한다.
  • 다른 오피스 제품(예: 워드, 파워포인트)에서도 Application.Name을 각 환경에서 사용 가능하며, VBA 공통 문법이다.

Application 개체 살펴보기: 메서드(Method)

1. Application.Run

  • 엑셀 외부에서든 VBA 내부에서든, 특정 매크로(Sub 프로시저)나 함수(Function)을 런타임에 호출할 수 있는 메서드다.
    Application.Run "Module1.MacroName", Arg1, Arg2
    • 프로시저 이름과 파라미터를 문자열 형태로 넘긴다.
    • 다른 통합 문서나 애드인(xlam)에 있는 매크로도 [통합문서]!ModuleName.Procedure 식으로 호출 가능.

2. Application.Calculate / CalculateFull / CalculateFullRebuild

  • 통합 문서나 워크시트 수식을 강제로 계산한다.
    • Application.Calculate: 변경된 셀만 재계산
    • Application.CalculateFull: 모든 수식을 전부 재계산
    • Application.CalculateFullRebuild: 일부 함수(예: OFFSET 등)가 참조하는 외부 종속성도 모두 재구축

3. Application.Quit

  • 엑셀을 종료한다. 매크로에서 이 명령을 실행하면, 저장 여부를 묻는 메시지(또는 DisplayAlerts 설정에 따라 무시) 후 엑셀이 닫힌다.
    Application.Quit
    • 무인 자동화 시, 작업이 끝난 뒤 엑셀 프로세스를 깔끔하게 정리하기 위해 사용될 수 있다.

4. Application.GetOpenFilename / GetSaveAsFilename

  • 파일 열기나 저장 대화상자를 표시해, 사용자가 선택한 파일 경로를 얻는 메서드다.
    Dim fName As Variant
    fName = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
    If fName <> False Then
        Workbooks.Open fName
    End If
    • 파일 다이얼로그를 사용자에게 띄우고, 선택한 경로를 반환한다.
    • 직접 파일 조작하기 전에 사용자 입력을 받을 수 있어 유용하다.

 

Application 개체 살펴보기: 실무 팁

1. 매크로 성능 최적화

  • ScreenUpdating = False + Calculation = xlCalculationManual + EnableEvents = False
    대규모 작업 전 세 속성을 조합해 놓으면 성능이 극적으로 향상된다. 작업 후에는 반드시 원복해야 한다.
  • Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ' 대량 처리 Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True

2. 에러 처리 주의

  • DisplayAlerts = False 상태에서 파일을 덮어쓰거나 시트를 삭제하면 경고 없이 바로 진행된다. 실수로 중요한 시트를 삭제해도 되돌릴 수 없으므로, 작업 완료 후 Application.DisplayAlerts = True로 되돌려야 한다.
  • 또, On Error Resume Next와 조합되면 예기치 않은 부작용이 생길 수 있어, 시나리오별로 철저한 예외 처리를 해야 한다.

3. 국제화 및 지역 설정

  • Application.International(xlCountryCode), Application.LanguageSettings 등은 엑셀의 언어·지역 정보를 확인할 때 사용된다.
  • 다국어 환경에서 날짜 서식이나 구분 기호 등을 코드로 제어할 때 활용 가능하다.

4. 다른 애플리케이션 연동

  • 엑셀 VBA에서 Application은 엑셀 자체 환경을 가리키지만, 다른 오피스 제품에서도 비슷한 개념의 Application 객체가 존재한다(Word, Outlook, PowerPoint 등).
  • “Application”을 혼동하지 않으려면 Late Binding(CreateObject) 또는 Early Binding(참조 설정)을 명확히 구분해 사용하는 편이 좋다.

예시 코드: Application 개체 종합 활용

Sub FinalReportProcess()

    ' 최적화: 화면 깜빡임·계산·이벤트 비활성화
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    ' 보고서 작업
    Call SummarizeData
    Call FormatReport
    Call SaveAndBackup

    ' 리소스 정리 및 설정 복원
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    MsgBox "최종 보고서 프로세스 완료!"
End Sub

Private Sub SummarizeData()
    ' 대량 데이터 합산
    ' ...
End Sub

Private Sub FormatReport()
    ' 보고서 서식 적용
    ' ...
End Sub

Private Sub SaveAndBackup()
    ' 정식 경로에 저장
    ActiveWorkbook.SaveAs "C:\Reports\FinalReport.xlsx"

    ' 백업 폴더에 추가 저장
    Application.DisplayAlerts = False  ' 덮어쓰기 경고 억제
    ActiveWorkbook.SaveCopyAs "C:\Backup\FinalReport_" & Format(Now, "yyyymmdd_hhmm") & ".xlsx"
    Application.DisplayAlerts = True
End Sub
  • Application 객체를 통해 화면 업데이트와 계산 모드, 이벤트, 경고 메시지를 일시적으로 끄고 복원하는 전형적인 패턴이다.
  • 대규모 매크로에서 성능 향상을 목표로 할 때 꼭 익혀두는 코드 블록이다.

주의 사항 및 마무리

  • Application 개체 설정 후 원복하지 않으면, 엑셀이 수동 계산 모드나 경고 비활성 상태로 남아 다른 작업에 지장을 줄 수 있다. 항상 try~finally 구조(에러 발생에도 복원되도록)나 On Error 구문으로 복구를 처리해야 안전하다.
  • Application 개체에 대한 무분별한 조작은 사용자의 환경 설정을 심각하게 훼손할 수 있으므로, 확실히 필요할 때만 써야 한다.
  • 그러나 적절한 시점에 화면 업데이트, 자동 계산, 이벤트 트리거 등을 제어하면 매크로 성능과 사용자 경험이 동시에 향상된다.

결국 Application 개체 살펴보기를 통해 엑셀 전역 환경을 자유롭게 다루는 법을 익히면, 대규모 VBA 프로젝트에서 유연하고 효율적인 코드를 작성할 수 있다. 스크린 업데이트와 경고 메시지, 계산 모드, 이벤트 실행 여부 등을 상황에 맞춰 제어함으로써, 반복 업무를 최적화하고 협업 시 피로도도 줄일 수 있다.

반응형