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