VBA 프로젝트
VBA 프로젝트
이 가이드는 Aspose.Words FOSS for .NET를 사용하여 매크로 사용 문서에 포함된 VBA 프로젝트를 검사하고 수정하는 방법을 보여줍니다. Aspose.Words FOSS for .NET는 매크로 사용 문서(.docm)에 포함된 VBA 프로젝트—모듈, 소스 코드 및 라이브러리 참조—를 Document.VbaProject 및 VbaProject/VbaModule 객체 모델을 통해 검사하고 수정할 수 있습니다. 이는 프로젝트 검사 및 편집이며 매크로 실행이 아닙니다: Aspose.Words는 상용 제품이든 이 FOSS 에디션이든 VBA 런타임을 포함한 적이 없으므로 VBA 코드는 데이터로 읽고 수정될 뿐 실행되지 않습니다.
문서의 VBA 프로젝트에 접근하기
Document.VbaProject은 VbaProject을 반환하며, 문서에 VBA 프로젝트가 없으면 null를 반환합니다. Document.HasMacros은 먼저 VbaProject에 접근할 필요 없이 VBA 프로젝트가 존재하는지 여부를 보고합니다. VbaProject.Name, CodePage, IsSigned, 및 IsProtected은 프로젝트 자체를 설명합니다.
모듈 읽기 및 편집
VbaProject.Modules은 VbaModuleCollection을 반환합니다. 이름으로 인덱싱하여 특정 모듈(예: modules["ModuleName"])을 찾거나 전체 컬렉션을 열거할 수 있습니다. 각 VbaModule은 Name와 Type (a VbaModuleType: DocumentModule, ProceduralModule, ClassModule, 또는 DesignerModule), 그리고 중요한 점은 SourceCode을 쓰기 가능한 문자열 속성으로 노출하므로 모듈 소스를 프로그래밍 방식으로 읽고 다시 쓸 수 있습니다. VbaModuleCollection.Add(vbaModule)와 Remove(module)은 프로젝트에 모듈을 추가하거나 제거합니다.
라이브러리 참조
VbaProject.References은(는) VbaReference 객체의 VbaReferenceCollection을(를) 반환합니다 — 매크로 코드가 의존하는 Automation 유형 라이브러리 및 기타 VBA 프로젝트입니다. VbaReference.Type은(는) VbaReferenceType(Registered, Project, Original, 또는 Control)를 보고하고, LibId은(는) 참조된 라이브러리를 식별합니다. VbaReferenceCollection.Remove(item) / RemoveAt(index)은(는) 참조를 제거합니다.
VBA 프로젝트 제거
Document.RemoveMacros()은(는) 문서에서 VBA 프로젝트를 완전히 제거합니다 — 원래 매크로가 포함된 문서의 매크로 없는 복사본을 만들 때 유용합니다.
팁 및 모범 사례
- 매크로가 전혀 없었던 문서에 대해 null 처리를 방지하려면
Document.VbaProject을(를) 건드리기 전에Document.HasMacros을(를) 확인하십시오. VbaModule.SourceCode을(를) 일반 텍스트로 취급하십시오 — VBA 런타임이 없기 때문에 편집해도 코드 검증이 이루어지지 않습니다; 형식이 잘못된 VBA는 여전히 라운드트립되지만, 수정될 때까지 Word에서 올바르게 실행되지 않습니다.- 모듈을 수정하기 시도하기 전에 서명되었거나 보호된 프로젝트를 감지하려면
VbaProject.IsSigned/IsProtected을(를) 사용하십시오. Document.RemoveMacros()은(는) 모든 모듈을 수동으로 삭제하는 대신 “깨끗한” 배포 사본을 위해 매크로를 제거하는 가장 간단한 방법입니다.
공통 문제
| 문제 | 원인 | 해결 방법 |
|---|---|---|
Document.VbaProject은 null | 문서에 VBA 프로젝트가 없습니다. | 먼저 Document.HasMacros을(를) 확인한 후 VbaProject 멤버에 접근하십시오. |
SourceCode를 편집한 후 매크로가 실행될 것으로 기대합니다. | Aspose.Words에 VBA 실행 엔진이 없습니다. | 이 API를 사용하여 매크로 소스와 구조만 읽고/수정하십시오; 결과 문서를 VBA 런타임이 있는 환경, 예를 들어 Microsoft Word에서 실행하여 코드를 실행합니다. |
VbaModuleCollection를 이름으로 인덱싱하면 아무 것도 반환되지 않습니다. | 모듈 이름 불일치(대소문자 또는 정확한 철자). | VbaProject.Modules를 열거하여 정확한 모듈 이름을 확인하십시오. |
FAQ
Aspose.Words FOSS for .NET가 문서에서 VBA 매크로를 실행할 수 있나요?
아니요. 이 에디션도 상업용 Aspose.Words 제품도 VBA 실행 엔진을 포함하지 않습니다 — VBA 프로젝트는 데이터(모듈 소스, 참조, 프로젝트 메타데이터)로 읽고 수정될 뿐, 실행되지 않습니다.
매크로의 소스 코드를 어떻게 읽나요?
VbaProject.Modules를 이름으로 인덱싱하여 모듈을 가져온 다음(예: modules["ModuleName"]), 해당 모듈의 SourceCode 속성을 읽으세요.
새 VBA 모듈을 문서에 추가할 수 있나요?
예 — VbaModule를 생성하고 Add(vbaModule)를 통해 프로젝트의 VbaModuleCollection에 추가합니다.
문서를 처리하기 전에 해당 문서에 매크로가 있는지 어떻게 확인합니까?
Document.HasMacros를 읽으세요; 문서에 VBA 프로젝트가 포함되어 있으면 true이며, 먼저 Document.VbaProject에 접근할 필요가 없습니다.
문서에서 모든 매크로를 제거하려면 어떻게 해야 합니까?
Document.RemoveMacros()를 호출하세요.
API Reference 요약
| 클래스 / 메서드 | 설명 |
|---|---|
Document.VbaProject | 문서의 VbaProject이며, 매크로가 없을 경우 null입니다. |
Document.HasMacros | VBA 프로젝트가 존재하는지 여부 |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | 하나의 모듈: Name, Type (VbaModuleType), 쓰기 가능 SourceCode |
VbaModuleCollection | Add(), 이름별 인덱서, Remove(), Count |
VbaReference / VbaReferenceCollection | 참조된 형식 라이브러리: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | 문서에서 VBA 프로젝트를 제거합니다 |