Lucrul cu VBA macrocomenzi

Visual Basic pentru aplicații (VBA) Pentru Microsoft Word este un limbaj de programare simplu, dar puternic, care poate fi folosit pentru a extinde funcționalitatea. Aspose.Words API oferă trei clase pentru a avea acces la codul sursă al proiectului VBA:

  • Clasa VBAProject oferă acces la VBA Informații despre proiect
  • Clasa VBAModuleCollection returnează colecția de module de proiect VBA
  • Clasa VbaModule oferă acces la modulul de proiect VBA
  • Enumerarea VbaModuleType definește tipurile unui model într-un proiect VBA. Modulul poate fi un modul procedural, un modul de document, un modul de clasă sau un modul de designer

Creați un proiect VBA

Aspose.Words API furnizează proprietatea vba_project pentru a obține sau seta VbaProject în document.

Următorul exemplu de cod demonstrează cum se creează un Proiect VBA și un modul VBA împreună cu proprietăți De Bază, de exemplu 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")

Citiți Macrocomenzi

Aspose.Words oferă, de asemenea, utilizatorilor posibilitatea de a citi macrocomenzi VBA.

Următorul exemplu de cod arată cum să citiți VBA macrocomenzi din document:

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

Scrieți sau modificați macrocomenzi

Folosind Aspose.Words, utilizatorii pot modifica macro-urile VBA.

Următorul exemplu de cod arată cum să modificați macrocomenzile VBA folosind proprietatea 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")

Proiectul Clone VBA

Cu Aspose.Words este posibilă și clonarea proiectelor VBA.

Următorul exemplu de cod arată cum se clonează proiectul VBA folosind proprietatea clone care creează o copie a proiectului existent:

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

Modul Clonă VBA

De asemenea, puteți clona modulele VBA dacă este necesar.

Următorul exemplu de cod arată cum se clonează modulul VBA folosind proprietatea clone care creează o copie a proiectului existent:

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

Lucrați cu referințele proiectului VBA

Aspose.Words API oferă VbaReferenceCollection clasă pentru a lucra cu VBA referințe de proiect reprezentând o colecție de VBA referințe de proiect.

Următorul exemplu de cod arată cum să eliminați unele referințe din colecția de referințe dintr-un proiect 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 ""