การทำงานกับมาโคร 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 "" | |