VBA 버전별 차이점은 마이크로소프트 오피스 제품군이 발전하면서 함께 변화해 왔다. 이 과정에서 호환성, 기능, 개발 환경 등에 다양한 변화가 발생해 사용자는 각 버전에 따른 차이를 이해할 필요가 있다. VBA 버전별 차이점은 주로 Excel, Word, Access 등의 애플리케이션에 포함된 VBA 엔진 업데이트와 관련 라이브러리 개선 사항으로 나타난다.
VBA 버전별 차이점과 기본 개념
VBA(Visual Basic for Applications)는 기존의 VB6 문법을 바탕으로, 오피스 환경에서 매크로 기능을 제공하기 위해 만든 언어다. 버전이 바뀔 때마다 IDE(Integrated Development Environment) 개선, 메서드 및 프로퍼티 추가, 데이터 형식 확장 등 다양한 차이가 생겼다. 아래 목록은 VBA의 기초 개념을 정리한 것이다.
- 매크로: 반복 업무를 자동화하기 위한 코드 집합
- 개체 모델: 워크시트, 워크북, 셀 객체 등 오피스 애플리케이션에 특화된 객체 구조
- IDE: VBA 에디터로, 코드 작성 및 디버깅을 수행
- 보안 설정: 매크로 실행 권한을 지정하는 옵션
VBA 5.0 시대
VBA 5.0은 Office 97에 포함된 버전으로, 대규모 업데이트를 거치면서 본격적으로 VBA가 널리 쓰이기 시작했다. 이 시기에 주목할 만한 변화는 다음과 같다.
- VB6 기반 문법 도입
- VB6와 유사한 문법으로 확장성과 호환성을 높였다.
- 기존의 Excel 5.0 매크로 언어(XLM)와 병행 사용이 가능했다.
- 기본 IDE 개선
- 바로 가기 키(예: F8 단축키로 단계별 실행) 등을 지원해 디버깅 환경이 편리해졌다.
- 프로젝트 탐색기와 속성 창을 통해 객체를 직관적으로 관리할 수 있었다.
예시 코드(VBA 5.0 스타일)
Sub VBA5Example()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = "VBA5 테스트"
Next i
End Sub
위 코드는 VBA 5.0 시대에도 흔히 사용되던 For~Next 구문으로 셀에 간단한 문자열을 입력하는 예시다. 기본적인 문법 구조는 오늘날의 VBA와 크게 다르지 않다.
VBA 6.0과 이후(Office 2000 ~ 2003)
Office 2000부터 본격적으로 VBA 6.0이 도입되었다. 이후 Office XP(2002), Office 2003 버전에서도 6.x 계열을 유지하며 소소한 변경이 이어졌다.
- VBA 라이브러리 강화
- Excel, Word, PowerPoint 등 각 애플리케이션에서 제공하는 객체 라이브러리가 확장되었다.
- 차트, 그래픽, 테이블 등을 다루는 객체 모델이 보다 풍부해졌다.
- 에러 처리 구문 강화
On Error GoTo
등 기존 구문은 동일하나, IDE에서 런타임 오류가 발생했을 때 좀 더 구체적인 메시지를 확인할 수 있게 되었다.
- 보안 수준 설정 등장
- 매크로 보안 설정 옵션이 생겨, 서명되지 않은 매크로의 실행이 제한되는 등 안전성이 높아졌다.
단계별 사용법
- 매크로 보안 설정:
도구
→매크로
→보안
에서 레벨 조정 - 참조 설정: VBA 에디터 상단의
도구
→참조
메뉴에서 필요한 라이브러리를 체크
예시 코드(VBA 6.x)
Sub VBA6Example()
Dim i As Long
For i = 1 To 5
ActiveSheet.Cells(i, 1).Value = "VBA6 차이점"
Next i
End Sub
이 시기의 핵심 포인트는 로컬 환경에서 매크로 보안을 엄격하게 관리하기 시작했다는 점이다. 또한 IDE가 업데이트되어, 자동 완성(IntelliSense) 기능이 부분적으로 향상되었다.
VBA 6.3(Office XP ~ 2003 상세)
Office XP(2002)와 2003에 탑재된 VBA 6.3은 비주얼 베이식 에디터 자체가 크게 달라지지는 않았지만, 다음 사항을 주의 깊게 볼 수 있다.
- Object Library 업데이트
- Excel, Word 등의 개체 모델에서 새로 추가된 프로퍼티와 메서드가 포함되었다.
- Windows XP 테마 지원
- IDE가 운영체제 테마와 좀 더 잘 어울리도록 폼 컨트롤 렌더링이 약간 개선되었다.
이러한 변경사항은 대규모 기능 추가보다는 안정화 및 호환성에 초점이 맞춰져 있다.
VBA 7.0(Office 2010 ~ 2013)
Office 2010부터는 VBA 7.0이 적용되었고, 32비트와 64비트 환경이 본격적으로 도입되었다. 이때 개발자가 주의해야 할 가장 큰 변화는 64비트 환경에서 API 함수 선언이 달라지는 부분이다.
- Win64 호환성
- 64비트 Office를 설치한 경우, VBA에서 API 함수를 호출할 때
PtrSafe
키워드가 필요하다. - LongLong 자료형을 사용하거나, Declare 문에서 인수 형식을 달리 설정해야 한다.
- 64비트 Office를 설치한 경우, VBA에서 API 함수를 호출할 때
- Declare 구문 변화
- 32비트 환경에서는 기존 Declare 문을 그대로 사용 가능하지만, 64비트에서는 아래와 같은 형식이 요구된다.
Declare PtrSafe Function MyAPIFunc Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
- IDE 환경 차이
- 64비트 환경에 맞춰 내부 디버거와 관련 레퍼런스가 업데이트되었다.
- 매크로 보안 수준을 설정하는 방식은 크게 달라지지 않았으나, 디지털 서명 인증서 체계가 조금 더 복잡해졌다.
예시 코드(VBA 7.0 이상에서 64비트 대응)
#If Win64 Then
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As LongPtr
#Else
Private Declare Function GetTickCount Lib "kernel32" () As Long
#End If
Sub VBA7Example()
Dim currentTick As LongLong
currentTick = GetTickCount()
Debug.Print "현재 TickCount: " & currentTick
End Sub
위 코드는 VBA 7.0 이상에서 64비트와 32비트를 모두 대응하기 위해 컴파일 지시문(#If Win64 Then
)을 사용한 예시다.
VBA 7.1(Office 2016 ~ 2019)
Office 2016 이후 버전에서는 VBA 7.1이 도입되었다. 주로 내부 안정화와 오피스 애플리케이션 자체의 기능 확장에 맞춰 개체 모델이 보강되었으며, 64비트 관련 호환성이 한층 강화되었다.
- 개체 모델 확장
- Excel 2016 이후 추가된 새 차트 종류(트리맵, 폭포 차트 등)에 접근하는 멤버가 추가되었다.
- Word, PowerPoint에서도 새로운 기능에 대응하는 프로퍼티가 소폭 늘어났다.
- 윈도우 10 환경 최적화
- IDE 창의 폰트 렌더링이나 일부 컨트롤 동작이 윈도우 10 테마에 맞게 수정되었다.
- 높은 DPI 스케일링 환경에서의 폼 표시 문제가 일부 개선되었다.
- API 선언 가이드 변경
- 마이크로소프트 측에서 공식 문서에 64비트 API 호출 표준 예시를 새롭게 제시했다.
- LongPtr, LongLong 사용 시 주의사항 등이 정리되어 있다.
32비트 vs 64비트 차이점 요약
아래는 VBA 버전별 차이점을 이해하기 위해 반드시 확인해야 할 32비트와 64비트 차이점이다.
구분 | 32비트 VBA | 64비트 VBA |
---|---|---|
Declare 문 | PtrSafe 미사용 | PtrSafe 및 LongPtr 필수 |
데이터 형식 | Long = 32비트 | LongLong = 64비트, LongPtr = 포인터 크기 맞춤 |
레지스트리 경로 | HKLM\Software\Wow6432Node 등 복잡도 낮음 | HKLM\Software 위치 차이, 일부 경로 수정 필요 |
호환성 | 기존 프로젝트와 완벽 호환 | 일부 API 호출, 서명 인증서 이슈 발생 가능 |
VBA 7.1 이후 주요 주의사항
- COM 레퍼런스: Excel이나 Word 등에서 확장 라이브러리를 사용할 때 32비트와 64비트 모두 지원하는지 확인 필요
- 사용자 정의 함수(UDF): 64비트 함수 포인터를 필요로 하는 API를 호출할 경우,
PtrSafe
여부 점검 - 오피스 업그레이드 시 매크로 호환성 테스트: 특히 기업 환경에서 오피스 버전을 업그레이드할 때는 VBA 호환성 이슈를 미리 점검해야 한다.
VBA 개발 단계별 접근
- 버전 확인
- Excel이나 Word에서
개발 도구
탭 →Visual Basic
→도움말
메뉴(또는 VBA 에디터도움말
→Microsoft Visual Basic 정보
)를 통해 현재 VBA 버전을 확인한다.
- Excel이나 Word에서
- 64비트 환경 준비
#If Win64 Then
구문으로 64비트 전용 Declare 문을 따로 작성한다.- 32비트 API 함수가 필요한 경우, 병행 선언을 고려한다.
- 테스트 환경 분리
- 32비트 오피스와 64비트 오피스를 각각 설치해 개발·테스트를 진행한다.
- 호환성 문제가 발생하지 않는지 함수 호출, 양방향 데이터 교환 등 시나리오별로 점검한다.
- 참조 라이브러리 설정
- 특정 버전에서만 지원되는 라이브러리가 있는지 확인 후, 필요 시 Late Binding 기법(
CreateObject
등)을 활용해 호환성을 높인다.
- 특정 버전에서만 지원되는 라이브러리가 있는지 확인 후, 필요 시 Late Binding 기법(
상세 예시 코드(버전별 호환성 체크)
아래는 VBA가 실행되는 버전을 판별하고, 해당 버전에 맞는 코드를 호출하는 예시다.
Sub CheckVBAVersion()
Dim versionNumber As String
versionNumber = Application.VBE.Version
If InStr(versionNumber, "7.1") > 0 Then
MsgBox "현재 VBA 버전: 7.1 (Office 2016 이상)"
Call CodeForVBA7_1
ElseIf InStr(versionNumber, "7") > 0 Then
MsgBox "현재 VBA 버전: 7.0 (Office 2010~2013)"
Call CodeForVBA7
ElseIf InStr(versionNumber, "6") > 0 Then
MsgBox "현재 VBA 버전: 6.x (Office 2000~2003)"
Call CodeForVBA6
Else
MsgBox "VBA 5.x 이하 혹은 예측 불가 버전"
End If
End Sub
Sub CodeForVBA7_1()
Debug.Print "VBA 7.1 전용 코드를 실행합니다."
' 64비트 API 호출 등 필요 시 추가
End Sub
Sub CodeForVBA7()
Debug.Print "VBA 7.0 전용 코드를 실행합니다."
' 32비트/64비트 분기 처리
End Sub
Sub CodeForVBA6()
Debug.Print "VBA 6.x 전용 코드를 실행합니다."
' 기본 문법
End Sub
코드의 핵심은 Application.VBE.Version
속성을 이용해 현재 VBA 버전을 문자열로 확인하는 것이다. 이후 조건 분기를 통해 특정 버전만 지원하는 함수를 별도로 호출할 수 있다.
버전 마이그레이션 시 주의사항
- API 호출: OS 버전에 따라 동작이 달라질 수 있으므로, 마이그레이션 전 호환성 자료를 충분히 확인한다.
- 개체 모델 변경: 신규 차트 객체나 기능은 구버전에서 인식되지 않을 수 있으므로, 필요 시 Late Binding 등을 사용한다.
- 매크로 보안 정책: 회사나 조직의 보안 규칙에 따라 서명된 매크로만 허용하는 경우가 많으니, VBA 프로젝트에 디지털 서명을 적용해야 할 수 있다.
복잡한 기능 구현 시 팁
- 클래스 모듈 사용: 프로젝트 규모가 커질수록 객체 지향적으로 클래스를 설계해 유지보수성을 높인다.
- Error Handling 체계화:
On Error GoTo
구문을 통해 예외 상황을 체계적으로 처리한다. - 배포 전 테스트: 버전별 DLL, ActiveX 컨트롤, OCX 등의 등록 상태를 확인 후 배포한다.
VBA 버전별 차이점 정리
VBA 버전별 차이점은 크게 VBA 5.0(Office 97)부터 6.0(Office 2000,2013), 그리고 7.1(Office 2016 이상)으로 구분할 수 있다. 각 버전은 IDE 개선, 보안 정책 강화, 32비트·64비트 지원 방식 변경 등 특징을 지니며, 고급 API 호출 시 PtrSafe
나 LongPtr
선언이 필요해졌다. 실제 프로젝트 환경에서는 원하는 결과를 얻기 위해 프로젝트 생성 전 버전 확인 절차가 필수적이다. 또한, VBA 버전별 차이점에 따라 새롭게 제공되는 개체 모델과 보안 옵션에 유의하여 코드를 작성해야 한다.
'#4 VBA > #4.1 환경설정 및 기본개념' 카테고리의 다른 글
매크로 오류 메시지 해석 기초 (0) | 2025.03.04 |
---|---|
32비트와 64비트 VBA 차이 (0) | 2025.03.03 |
신뢰할 수 있는 위치(Trusted Location) 설정 완벽 가이드 (0) | 2024.12.29 |
매크로 설정 권장사항 완벽 정리 (0) | 2024.12.29 |
Application 개체 살펴보기 완벽 정리 (0) | 2024.12.29 |