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 속성을 제공합니다.

다음 코드 예제에서는 nametype와 같은 기본 속성과 함께 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 ""