العمل مع وحدات ماكرو VBA
Visual Basic for Applications (VBA) for Microsoft Word هي لغة برمجة بسيطة ولكنها قوية يمكن استخدامها لتوسيع الوظائف. يوفر Aspose.Words API ثلاث فئات للوصول إلى التعليمات البرمجية المصدر لمشروع VBA:
- توفر فئة VBAProject إمكانية الوصول إلى معلومات مشروع VBA
- تقوم فئة VBAModuleCollection بإرجاع مجموعة وحدات مشروع VBA
- توفر فئة VbaModule إمكانية الوصول إلى وحدة مشروع VBA
- يحدد تعداد VbaModuleType أنواع النموذج في مشروع VBA. يمكن أن تكون الوحدة وحدة إجرائية، أو وحدة مستند، أو وحدة فئة، أو وحدة مصمم
إنشاء مشروع VBA
يوفر Aspose.Words API خاصية vba_project للحصول على VbaProject أو تعيينه في المستند.
يوضح مثال التعليمات البرمجية التالي كيفية إنشاء مشروع VBA ووحدة VBA مع الخصائص الأساسية، على سبيل المثال name و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") |
قراءة وحدات الماكرو
يوفر 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.
يوضح مثال التعليمات البرمجية التالي كيفية تعديل وحدات ماكرو VBA باستخدام خاصية 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") |
استنساخ مشروع VBA
باستخدام Aspose.Words، من الممكن أيضًا استنساخ مشاريع VBA.
يوضح مثال التعليمات البرمجية التالي كيفية استنساخ مشروع VBA باستخدام خاصية clone التي تقوم بإنشاء نسخة من المشروع الحالي:
# 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 إذا لزم الأمر.
يوضح مثال التعليمات البرمجية التالي كيفية استنساخ وحدة VBA باستخدام خاصية clone التي تقوم بإنشاء نسخة من المشروع الحالي:
# 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 فئة VbaReferenceCollection للعمل مع مراجع مشروع VBA التي تمثل مجموعة من مراجع مشروع 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") | |
# 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 "" | |