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를 가져오거나 설정하는 vba_project 속성을 제공합니다.
다음 코드 예제에서는 name 및 type와 같은 기본 속성과 함께 VBA 프로젝트 및 VBA 모듈을 만드는 방법을 보여줍니다
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
project = aw.vba.VbaProject() | |
project.name = "AsposeProject" | |
doc.vba_project = project | |
# Create a new module and specify a macro source code. | |
module = aw.vba.VbaModule() | |
module.name = "AsposeModule" | |
module.type = aw.vba.VbaModuleType.PROCEDURAL_MODULE | |
module.source_code = "New source code" | |
# Add module to the VBA project. | |
doc.vba_project.modules.add(module) | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.create_vba_project.docm") |
매크로 읽기
Aspose.Words는 또한 사용자에게 VBA 매크로를 읽을 수 있는 기능을 제공합니다.
다음 코드 예제에서는 문서에서 VBA 매크로를 읽는 방법을 보여줍니다
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
if (doc.vba_project != None) : | |
for module in doc.vba_project.modules : | |
print(module.source_code) | |
매크로 작성 또는 수정
Aspose.Words를 사용하면 사용자는 VBA 매크로를 수정할 수 있습니다.
다음 코드 예제에서는 source_code 속성을 사용하여 VBA 매크로를 수정하는 방법을 보여줍니다
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
project = doc.vba_project | |
newSourceCode = "Test change source code" | |
project.modules[0].source_code = newSourceCode | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.modify_vba_macros.docm") |
VBA 프로젝트 복제
Aspose.Words를 사용하면 VBA 프로젝트를 복제할 수도 있습니다.
다음 코드 예제에서는 기존 프로젝트의 복사본을 만드는 clone 속성을 사용하여 VBA 프로젝트를 복제하는 방법을 보여줍니다
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
destDoc = aw.Document() | |
destDoc.vba_project = doc.vba_project.clone() | |
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_project.docm") |
VBA 모듈 복제
필요한 경우 VBA 모듈을 복제할 수도 있습니다.
다음 코드 예제에서는 기존 프로젝트의 복사본을 만드는 clone 속성을 사용하여 VBA 모듈을 복제하는 방법을 보여줍니다
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
destDoc = aw.Document() | |
destDoc.vba_project = aw.vba.VbaProject() | |
copyModule = doc.vba_project.modules.get_by_name("Module1").clone() | |
destDoc.vba_project.modules.add(copyModule) | |
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_module.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-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
# Find and remove the reference with some LibId path. | |
brokenPath = "brokenPath.dll" | |
references = doc.vba_project.references | |
for i in range(references.count - 1, 0) : | |
reference = doc.vba_project.references.element_at(i) | |
path = get_lib_id_path(reference) | |
if (path == brokenPath) : | |
references.remove_at(i) | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.remove_broken_ref.docm") |
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
# <summary> | |
# Returns string representing LibId path of a specified reference. | |
# </summary> | |
def get_lib_id_path(self, reference) : | |
if reference.type == aw.vba.VbaReferenceType.REGISTERED or reference.type == aw.vba.VbaReferenceType.ORIGINAL or reference.type == aw.vba.VbaReferenceType.CONTROL : | |
return self.get_lib_id_reference_path(reference.lib_id) | |
elif reference.type == aw.vba.VbaReferenceType.PROJECT : | |
return self.get_lib_id_project_path(reference.lib_id) | |
else : | |
raise RuntimeError() | |
# <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> | |
@staticmethod | |
def get_lib_id_reference_path(libIdReference : str) : | |
if (libIdReference != None) : | |
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> | |
@staticmethod | |
def get_lib_id_project_path(libIdProject : str) : | |
if (libIdProject != None) : | |
return libIdProject.substring(3) | |
return "" | |