کار با ماکرو VBA

Visual Basic for Applications (VBA) برای 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 ""