โปรเจกต์ VBA

โปรเจกต์ VBA

โครงการ VBA

คู่มือนี้แสดงวิธีตรวจสอบและแก้ไขโครงการ VBA ที่ฝังอยู่ในเอกสารที่เปิดใช้งานแมโครด้วย Aspose.Words FOSS สำหรับ .NET. Aspose.Words FOSS สำหรับ .NET สามารถตรวจสอบและแก้ไขโครงการ VBA ที่ฝังอยู่ในเอกสารที่เปิดใช้งานแมโคร (.docm) — โมดูล, โค้ดต้นฉบับ, และการอ้างอิงไลบรารี — ผ่าน Document.VbaProject และโมเดลวัตถุ VbaProject/VbaModule. นี่คือการตรวจสอบและแก้ไขโครงการ ไม่ใช่การรันแมโคร: Aspose.Words ไม่เคยรวม runtime ของ VBA ไม่ว่าจะในผลิตภัณฑ์เชิงพาณิชย์หรือรุ่น FOSS นี้ ดังนั้นโค้ด VBA จะถูกอ่านและแก้ไขเป็นข้อมูล ไม่ได้ทำงาน.


การเข้าถึงโครงการ VBA ของเอกสาร

Document.VbaProject คืนค่า VbaProject, หรือ null หากเอกสารไม่มีโครงการ VBA. Document.HasMacros รายงานว่ามีโครงการ VBA อยู่หรือไม่โดยที่คุณไม่ต้องเข้าถึง VbaProject ก่อน. VbaProject.Name, CodePage, IsSigned, และ IsProtected อธิบายรายละเอียดของโครงการเอง.


การอ่านและแก้ไขโมดูล

VbaProject.Modules คืนค่า VbaModuleCollection. ดัชนีเข้าไปโดยใช้ชื่อเพื่อค้นหาโมดูลเฉพาะ (เช่น modules["ModuleName"]) หรือวนรายการทั้งหมดของคอลเลกชัน. แต่ละ VbaModule เปิดเผย Name, Type (ซึ่งเป็น VbaModuleType: DocumentModule, ProceduralModule, ClassModule, หรือ DesignerModule), และ — ที่สำคัญ — SourceCode ของมันในรูปแบบคุณสมบัติสตริงที่สามารถเขียนได้, ดังนั้นซอร์สของโมดูลจึงสามารถอ่านและเขียนใหม่ได้โดยโปรแกรม. VbaModuleCollection.Add(vbaModule) และ Remove(module) เพิ่มหรือเอาโมดูลออกจากโครงการ.


การอ้างอิงไลบรารี

VbaProject.References คืนค่า VbaReferenceCollection ของอ็อบเจกต์ VbaReference — ไลบรารีประเภท Automation และโครงการ VBA อื่น ๆ ที่โค้ดมาโครพึ่งพา VbaReference.Type รายงาน VbaReferenceType (Registered, Project, Original หรือ Control) และ LibId ระบุไลบรารีที่อ้างอิง VbaReferenceCollection.Remove(item) / RemoveAt(index) ลบการอ้างอิง.


การลบโครงการ VBA

Document.RemoveMacros() ลบโครงการ VBA ออกจากเอกสารอย่างสมบูรณ์ — มีประโยชน์สำหรับการสร้างสำเนาเอกสารที่ไม่มีมาโครซึ่งต้นฉบับมาพร้อมกับมาโคร.


เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ตรวจสอบ Document.HasMacros ก่อนแก้ไข Document.VbaProject เพื่อหลีกเลี่ยงการจัดการค่า null สำหรับเอกสารที่ไม่เคยมีมาโคร.
  • ถือว่า VbaModule.SourceCode เป็นข้อความธรรมดา — เนื่องจากไม่มี runtime ของ VBA การแก้ไขจึงไม่ตรวจสอบความถูกต้องของโค้ด; VBA ที่ผิดรูปแบบจะยังคงผ่านการส่งต่อได้ แต่จะไม่ทำงานอย่างถูกต้องใน Word จนกว่าจะได้รับการแก้ไข.
  • ใช้ VbaProject.IsSigned/IsProtected เพื่อตรวจจับโครงการที่ลงนามหรือได้รับการป้องกันก่อนพยายามแก้ไขโมดูลของพวกมัน.
  • Document.RemoveMacros() เป็นวิธีที่ง่ายที่สุดในการลบมาโครสำหรับสำเนาการจัดจำหน่าย “clean” แทนการลบโมดูลทั้งหมดด้วยตนเอง.

ปัญหาทั่วไป

ปัญหาสาเหตุวิธีแก้ไข
Document.VbaProject คือ nullเอกสารไม่มีโครงการ VBAตรวจสอบ Document.HasMacros ก่อนที่จะเข้าถึงสมาชิกของ VbaProject
คาดว่าแมโครจะทำงานหลังจากแก้ไข SourceCodeAspose.Words ไม่มีเครื่องยนต์การทำงาน VBAใช้ API นี้เพื่ออ่าน/แก้ไขซอร์สและโครงสร้างของมาโครเท่านั้น; รันเอกสารที่ได้ในสภาพแวดล้อมที่มี VBA runtime เช่น Microsoft Word เพื่อดำเนินการโค้ด
การทำดัชนี VbaModuleCollection ตามชื่อไม่ให้ผลลัพธ์ใดชื่อโมดูลไม่ตรงกัน (ตัวอักษรหรือการสะกดที่ตรงกันอย่างแม่นยำ)แสดงรายการ VbaProject.Modules เพื่อยืนยันชื่อโมดูลที่แม่นยำ

FAQ

สามารถ Aspose.Words FOSS สำหรับ .NET รันมาโคร VBA ในเอกสารได้หรือไม่?

ไม่ใช่. ทั้งรุ่นนี้และผลิตภัณฑ์ Aspose.Words เชิงพาณิชย์ไม่มีเครื่องยนต์การดำเนินการ VBA — โครงการ VBA จะถูกอ่านและแก้ไขเป็นข้อมูล (ซอร์สโมดูล, การอ้างอิง, เมตาดาทาโครงการ) ไม่เคยถูกดำเนินการ.

ฉันจะอ่านซอร์สโค้ดของมาโครอย่างไร?

ดึงโมดูลโดยทำดัชนี VbaProject.Modules ตามชื่อ (เช่น modules["ModuleName"]) แล้วอ่านคุณสมบัติ SourceCode ของมัน.

ฉันสามารถเพิ่มโมดูล VBA ใหม่ทั้งหมดลงในเอกสารได้หรือไม่?

ใช่ — สร้าง VbaModule แล้วเพิ่มมันเข้าไปใน VbaModuleCollection ของโครงการผ่าน Add(vbaModule).

ฉันจะตรวจสอบว่าเอกสารมีแมโครหรือไม่ก่อนที่จะประมวลผลได้อย่างไร?

อ่าน Document.HasMacros; จะเป็น true หากเอกสารมีโครงการ VBA โดยที่คุณไม่ต้องเข้าถึง Document.VbaProject ก่อน.

ฉันจะลบแมโครทั้งหมดออกจากเอกสารได้อย่างไร?

เรียก Document.RemoveMacros().


API Reference สรุป

คลาส / เมธอดคำอธิบาย
Document.VbaProjectVbaProject ของเอกสาร, หรือ null หากไม่มีมาโคร
Document.HasMacrosว่ามีโปรเจกต์ VBA อยู่หรือไม่
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleโมดูลหนึ่ง: Name, Type (VbaModuleType), เขียนได้ SourceCode
VbaModuleCollectionAdd(), ดัชนีตามชื่อ, Remove(), Count
VbaReference / VbaReferenceCollectionไลบรารีประเภทที่อ้างอิง: Type (VbaReferenceType), LibId
Document.RemoveMacros()ลบโครงการ VBA ออกจากเอกสาร

ดูเพิ่มเติม

 ภาษาไทย