עבודה עם VBA Macros

Visual Basic בקשה (VBA) Microsoft Word היא שפת תכנות פשוטה אך עוצמתית שניתן להשתמש בה כדי להרחיב את הפונקציונליות. Aspose.Words API מספק שלוש כיתות כדי לקבל גישה לקוד המקור של פרויקט VBA:

  • The VBAProject קטגוריה מספקת גישה למידע של פרויקט VBA
  • The VBAModuleCollection קטגוריה מחזירה את אוסף המודולים של פרויקט VBA
  • The VbaModule שיעור מספק גישה למודול פרויקט VBA
  • The VbaModuleType הערכה מגדירה את סוגי המודל בפרויקט VBA. המודול יכול להיות מודול procedural, מודול מסמך, מודול הכיתה, או מודול מעצב

יצירת פרויקט VBA

Aspose.Words API מספק vba_project רכוש כדי להגיע או להגדיר VbaProject במסמך.

הדוגמה הבאה של הקוד מראה כיצד ליצור פרויקט VBA ומודול VBA יחד עם תכונות בסיסיות e.g. 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")

Read Macros

Aspose.Words מספק למשתמשים את היכולת לקרוא מאקרו VBA.

דוגמה לקוד הבא מראה כיצד לקרוא את VBA Macros מהמסמכים:

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

תגית: Modify Macros

שימוש Aspose.Words, משתמשים יכולים לשנות מאקרו VBA.

דוגמה לקוד הבא מראה כיצד לשנות את VBA Macros באמצעות ה-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")

Clone VBA פרויקט

עם Aspose.Words ניתן גם לשחזר פרויקטים של 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 = doc.vba_project.clone()
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_project.docm")

Clone VBA מודול

ניתן גם לשחזר מודולי 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 Project Applications

Aspose.Words API מספק VbaReferenceCollection שיעור לעבוד עם VBA Project הפניות המייצגות אוסף של אזכורי פרויקט 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 ""