VBA 매크로 작업
Microsoft Word용 VBA(Visual Basic for Application)는 기능을 확장하는 데 사용할 수 있는 간단하지만 강력한 프로그래밍 언어입니다. Aspose.Words API는 VBA 프로젝트 소스 코드에 액세스할 수 있는 세 가지 클래스를 제공합니다
- VBAProject 클래스는 VBA 프로젝트 정보에 대한 액세스를 제공합니다
- VBAModuleCollection 클래스는 VBA 프로젝트 모듈 컬렉션을 반환합니다
- VbaModule 클래스는 VBA 프로젝트 모듈에 대한 액세스를 제공합니다
- VbaModuleType 열거형은 VBA 프로젝트의 모델 유형을 정의합니다. 모듈은 절차적 모듈, 문서 모듈, 클래스 모듈 또는 디자이너 모듈일 수 있습니다
VBA 프로젝트 만들기
Aspose.Words API는 문서에서 VbaProject를 가져오거나 설정하기 위한 VbaProject 속성을 제공합니다.
다음 코드 예제에서는 이름 및 유형과 같은 기본 속성과 함께 VBA 프로젝트 및 VBA 모듈을 만드는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
// Create a new VBA project. | |
VbaProject project = new VbaProject(); | |
project.Name = "AsposeProject"; | |
doc.VbaProject = project; | |
// Create a new module and specify a macro source code. | |
VbaModule module = new VbaModule(); | |
module.Name = "AsposeModule"; | |
module.Type = VbaModuleType.ProceduralModule; | |
module.SourceCode = "New source code"; | |
// Add module to the VBA project. | |
doc.VbaProject.Modules.Add(module); | |
doc.Save(dataDir + "VbaProject_out.docm"); |
매크로 읽기
Aspose.Words는 또한 사용자에게 VBA 매크로를 읽을 수 있는 기능을 제공합니다.
다음 코드 예제에서는 문서에서 VBA 매크로를 읽는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "Document.dot"); | |
if (doc.VbaProject != null) | |
{ | |
foreach (VbaModule module in doc.VbaProject.Modules) | |
{ | |
Console.WriteLine(module.SourceCode); | |
} | |
} |
매크로 작성 또는 수정
Aspose.Words를 사용하면 사용자는 VBA 매크로를 수정할 수 있습니다.
다음 코드 예제에서는 SourceCode 속성을 사용하여 VBA 매크로를 수정하는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "test.docm"); | |
VbaProject project = doc.VbaProject; | |
const string newSourceCode = "Test change source code"; | |
// Choose a module, and set a new source code. | |
project.Modules[0].SourceCode = newSourceCode; |
VBA 프로젝트 복제
Aspose.Words를 사용하면 VBA 프로젝트를 복제할 수도 있습니다.
다음 코드 예제에서는 기존 프로젝트의 복사본을 만드는 Clone 속성을 사용하여 VBA 프로젝트를 복제하는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
VbaProject project = doc.VbaProject; | |
Document destDoc = new Document(); | |
// Clone the whole project. | |
destDoc.VbaProject = doc.VbaProject.Clone(); | |
destDoc.Save(dataDir + "output.docm"); |
VBA 모듈 복제
필요한 경우 VBA 모듈을 복제할 수도 있습니다.
다음 코드 예제에서는 기존 프로젝트의 복사본을 만드는 Clone 속성을 사용하여 VBA 모듈을 복제하는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
VbaProject project = doc.VbaProject; | |
Document destDoc = new Document(); | |
destDoc.VbaProject = new VbaProject(); | |
// Clone a single module. | |
VbaModule copyModule = doc.VbaProject.Modules["Module1"].Clone(); | |
destDoc.VbaProject.Modules.Add(copyModule); | |
destDoc.Save(dataDir + "output.docm"); |
VBA 프로젝트 참조 작업
Aspose.Words API는 VBA 프로젝트 참조 모음을 나타내는 VBA 프로젝트 참조 작업을 위한 VbaReferenceCollection 클래스를 제공합니다.
다음 코드 예제에서는 VBA 프로젝트의 참조 컬렉션에서 일부 참조를 제거하는 방법을 보여줍니다
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject.docm"); | |
// Find and remove the reference with some LibId path. | |
const string brokenPath = "brokenPath.dll"; | |
VbaReferenceCollection references = doc.VbaProject.References; | |
for (int i = references.Count - 1; i >= 0; i--) | |
{ | |
VbaReference reference = doc.VbaProject.References.ElementAt(i); | |
string path = GetLibIdPath(reference); | |
if (path == brokenPath) | |
references.RemoveAt(i); | |
} | |
doc.Save(dataDir + "NoBrokenRef.docm"); |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
/// <summary> | |
/// Returns string representing LibId path of a specified reference. | |
/// </summary> | |
private static string GetLibIdPath(VbaReference reference) | |
{ | |
switch (reference.Type) | |
{ | |
case VbaReferenceType.Registered: | |
case VbaReferenceType.Original: | |
case VbaReferenceType.Control: | |
return GetLibIdReferencePath(reference.LibId); | |
case VbaReferenceType.Project: | |
return GetLibIdProjectPath(reference.LibId); | |
default: | |
throw new ArgumentOutOfRangeException(); | |
} | |
} | |
/// <summary> | |
/// Returns path from a specified identifier of an Automation type library. | |
/// </summary> | |
/// <remarks> | |
/// Please see details for the syntax at [MS-OVBA], 2.1.1.8 LibidReference. | |
/// </remarks> | |
private static string GetLibIdReferencePath(string libIdReference) | |
{ | |
if (libIdReference != null) | |
{ | |
string[] refParts = libIdReference.Split('#'); | |
if (refParts.Length > 3) | |
return refParts[3]; | |
} | |
return ""; | |
} | |
/// <summary> | |
/// Returns path from a specified identifier of an Automation type library. | |
/// </summary> | |
/// <remarks> | |
/// Please see details for the syntax at [MS-OVBA], 2.1.1.12 ProjectReference. | |
/// </remarks> | |
private static string GetLibIdProjectPath(string libIdProject) | |
{ | |
return (libIdProject != null) ? libIdProject.Substring(3) : ""; | |
} |