Excel VBA 모듈, 단순 텍스트 편집이 아닌 복잡한 파일 시스템 관리!

by DD
1주 전
조회수 4

Excel VBA 모듈은 단순 텍스트 편집이 아닌, 다층 구조(Multi-layered Structure)를 가진 복잡한 파일 형식임

ZIP, MS-CFB, 압축, 캐시 관리 등 다양한 기술적 요소들을 고려해야 함

MS-OVBA 명세 및 MS-CFB 형식을 기반으로 한 VBA 모듈의 안전한 읽기/쓰기 가이드라인 제시

오래된 코드베이스(Legacy Codebase)오픈 XML 표준(Open XML Standard) 간의 기술적 차이점 언급

VBA 모듈 저장 방식의 복잡성

게시물에 따르면 Excel VBA 모듈은 단순한 텍스트 파일이 아닌, 여러 계층으로 구성된 복잡한 구조를 가진다. 구체적으로, ZIP/Open XML 패키지(Open XML Package) 내에 xl/vbaProject.bin 파일이 존재하며, 이 파일은 다시 MS-CFB(Microsoft Compound File Binary) 형식으로 구성된다. MS-CFB 내에는 압축된 VBA 소스 코드가 포함되어 있으며, 이 소스 코드는 프로젝트 코드 페이지(Project Codepage)를 사용하여 인코딩된다. 이러한 구조는 VBA 모듈의 수정, 저장, 캐싱(Caching) 과정에서 다양한 기술적 고려 사항을 요구한다.

MS-OVBA 명세 기반의 구현 가이드

게시물에서 언급된 MS-OVBA 구현 가이드는 VBA 모듈을 안전하게 읽고 쓸 수 있도록 돕는 실용적인 지침을 제공한다. 가이드에서는 MS-CFB(Microsoft Compound File Binary), 압축(Compression), 디렉토리 스트림(Dir Stream), 프로젝트 스트림(Project Stream) 등 VBA 프로젝트의 핵심 구성 요소들을 다룬다. 특히, 압축된 모듈 소스 코드를 올바르게 처리하기 위한 압축 알고리즘(Compression Algorithm)복원 과정(Decompression Process)에 대한 상세한 설명이 포함되어 있다.

VBA 모듈 수정 시 고려 사항

VBA 모듈을 수정할 때는 여러 가지 주의 사항을 고려해야 한다. 게시물에 따르면, VBA 소스 코드를 직접 수정하는 것은 간단한 작업이 아니며, 오피스 캐시(Office Caches)를 무효화하고, 디지털 서명(Digital Signatures)을 유지하며, 보호된 프로젝트(Protected Projects)를 처리하는 등 다양한 측면을 고려해야 한다. 특히, 최종 압축 청크(Final Compressed Chunks)를 올바르게 처리하지 않으면 파일이 손상될 수 있으며, 이러한 문제들을 해결하기 위해 가이드에서는 안전한 저장 파이프라인(Safe Save Pipeline)을 제시한다.

오래된 기술과 최신 표준의 공존

댓글에서는 Excel VBA가 1990년대에 개발되었으며, OOXML(Office Open XML) 표준이 등장하기 전에 설계되었음을 지적한다. 기술적으로 보면, VBA는 OLE2 컨테이너 형식(OLE2 Container Format)을 사용하며, 이는 초기 XLS 파일 형식과 동일하다. 이러한 오래된 기술은 최신 웹 표준인 UTF-8 대신 로컬 인코딩을 사용하며, 이는 다양한 인코딩 문제를 야기할 수 있다. 따라서 VBA 모듈을 다루는 것은 오래된 기술과 최신 표준 간의 호환성을 고려하는 복잡한 작업이다.

Writing VBA modules inside Excel files is much stranger than I expected