Praca z makrami VBA

Visual Basic for Applications (VBA) for Microsoft Word to prosty, ale potężny język programowania, którego można użyć do rozszerzenia funkcjonalności. Aspose.Words API udostępnia trzy klasy umożliwiające uzyskanie dostępu do kodu źródłowego projektu VBA:

  • Klasa VBAProject zapewnia dostęp do informacji o projekcie VBA
  • Klasa VBAModuleCollection zwraca kolekcję modułów projektu VBA
  • Klasa VbaModule zapewnia dostęp do modułu projektu VBA
  • Wyliczenie VbaModuleType definiuje typy modelu w projekcie VBA. Moduł może być modułem proceduralnym, modułem dokumentu, modułem klasy lub modułem projektanta

Utwórz projekt VBA

Aspose.Words API udostępnia właściwość vba_project umożliwiającą pobranie lub ustawienie formatu VbaProject w dokumencie.

Poniższy przykład kodu demonstruje sposób tworzenia projektu VBA i modułu VBA wraz z podstawowymi właściwościami, np. name i type:

# 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")

Przeczytaj makra

Aspose.Words zapewnia także użytkownikom możliwość odczytu makr VBA.

Poniższy przykład kodu pokazuje, jak czytać makra VBA z dokumentu:

# 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)

Napisz lub zmodyfikuj makra

Korzystając z Aspose.Words, użytkownicy mogą modyfikować makra VBA.

Poniższy przykład kodu pokazuje, jak modyfikować makra VBA przy użyciu właściwości source_code:

# 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")

Klonuj projekt VBA

Dzięki Aspose.Words możliwe jest również klonowanie projektów VBA.

Poniższy przykład kodu pokazuje, jak sklonować projekt VBA przy użyciu właściwości clone, która tworzy kopię istniejącego projektu:

# 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")

Klonuj moduł VBA

W razie potrzeby możesz także klonować moduły VBA.

Poniższy przykład kodu pokazuje, jak sklonować moduł VBA przy użyciu właściwości clone, która tworzy kopię istniejącego projektu:

# 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")

Pracuj z referencjami projektu VBA

Aspose.Words API udostępnia klasę VbaReferenceCollection do pracy z referencjami projektu VBA reprezentującymi zbiór odniesień do projektów VBA.

Poniższy przykład kodu pokazuje, jak usunąć niektóre odniesienia ze zbioru odniesień z projektu 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 ""