VBA Makrolarıyla Çalışmak

Microsoft Word için Uygulamalar için Visual Basic (VBA), işlevselliği genişletmek için kullanılabilecek basit ama güçlü bir programlama dilidir. Aspose.Words API, VBA projesi kaynak koduna erişim sağlamak için üç sınıf sağlar:

  • VBAProject sınıfı VBA proje bilgilerine erişim sağlar
  • VBAModuleCollection sınıfı, VBA proje modüllerinin koleksiyonunu döndürür
  • VbaModule sınıfı VBA proje modülüne erişim sağlar
  • VbaModuleType numaralandırması bir VBA projesindeki model türlerini tanımlar. Modül bir prosedür modülü, belge modülü, sınıf modülü veya tasarımcı modülü olabilir

VBA Projesi Oluşturma

Aspose.Words API, belgede VbaProject‘i almak veya ayarlamak için vba_project özelliğini sağlar.

Aşağıdaki kod örneği, name ve type gibi temel özelliklerle birlikte bir VBA projesinin ve VBA Modülünün nasıl oluşturulacağını gösterir:

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

Makroları Oku

Aspose.Words ayrıca kullanıcılara VBA makrolarını okuma olanağı da sağlar.

Aşağıdaki kod örneği, belgeden VBA Makrolarının nasıl okunacağını gösterir:

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

Makroları Yazma veya Değiştirme

Aspose.Words’i kullanarak kullanıcılar VBA makrolarını değiştirebilir.

Aşağıdaki kod örneği, source_code özelliğini kullanarak VBA Makrolarının nasıl değiştirileceğini gösterir:

# 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 Projesini Klonla

Aspose.Words ile VBA projelerini kopyalamak da mümkündür.

Aşağıdaki kod örneği, mevcut projenin bir kopyasını oluşturan clone özelliğini kullanarak VBA Projesinin nasıl kopyalanacağını gösterir:

# 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 Modülünü Klonla

Gerekirse VBA modüllerini de kopyalayabilirsiniz.

Aşağıdaki kod örneği, mevcut projenin bir kopyasını oluşturan clone özelliğini kullanarak VBA Modülünün nasıl kopyalanacağını gösterir:

# 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 Proje Referanslarıyla Çalışma

Aspose.Words API, VBA proje referanslarının bir koleksiyonunu temsil eden VBA Proje Referansları ile çalışmak üzere VbaReferenceCollection sınıfı sağlar.

Aşağıdaki kod örneği, bir VBA projesindeki referans koleksiyonundan bazı referansların nasıl kaldırılacağını gösterir:

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