پروژه‌های VBA

پروژه‌های VBA

این راهنما نشان می‌دهد چگونه می‌توان پروژه VBA تعبیه‌شده در سندی با قابلیت ماکرو را با Aspose.Words FOSS برای .NET بررسی و تغییر داد. Aspose.Words FOSS برای .NET می‌تواند پروژه VBA تعبیه‌شده در یک سند با قابلیت ماکرو (.docm) — ماژول‌ها، کد منبع و ارجاعات کتابخانه‌ای آن — را از طریق Document.VbaProject و مدل شیء VbaProject/VbaModule بررسی و تغییر دهد. این کار بررسی و ویرایش پروژه است نه اجرای ماکرو: Aspose.Words هرگز شامل زمان‌اجرای 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.VbaProject، Document.HasMacros را بررسی کنید تا از مدیریت مقدار null برای سندهایی که هرگز ماکرو نداشته‌اند، جلوگیری شود.
  • VbaModule.SourceCode را به عنوان متن ساده در نظر بگیرید — چون زمان اجرا (runtime) VBA وجود ندارد، ویرایش آن کد را اعتبارسنجی نمی‌کند؛ VBA خراب‌ساخت هنوز می‌تواند عبور کند، اما تا زمانی که اصلاح نشود، به‌درستی در Word اجرا نخواهد شد.
  • از VbaProject.IsSigned/IsProtected برای تشخیص پروژه‌های امضاشده یا محافظت‌شده قبل از تلاش برای تغییر ماژول‌های آن‌ها استفاده کنید.
  • Document.RemoveMacros() ساده‌ترین راه برای حذف ماکروها جهت تهیه یک نسخه توزیعی “تمیز” است، به‌جای پاک‌سازی دستی هر ماژول.

مشکلات رایج

مشکلدلیلرفع
Document.VbaProject null استسند پروژه VBA نداردقبل از دسترسی به اعضای VbaProject، ابتدا Document.HasMacros را بررسی کنید
انتظار می‌رود ماکروها پس از ویرایش SourceCode اجرا شوندAspose.Words موتور اجرای VBA ندارداز این API برای فقط خواندن/تغییر منبع و ساختار ماکرو استفاده کنید؛ سند حاصل را در محیطی که زمان اجرایی VBA دارد، مانند Microsoft Word، اجرا کنید تا کد اجرا شود
نمایه‌گذاری VbaModuleCollection بر اساس نام هیچ چیزی بر نمی‌گرداندعدم تطابق نام ماژول (حساس به حروف یا املای دقیق)فهرست‌کردن VbaProject.Modules برای تأیید نام دقیق ماژول

FAQ

آیا Aspose.Words FOSS برای .NET می‌تواند ماکروهای VBA را در یک سند اجرا کند؟

خیر. نه این نسخه و نه محصول تجاری Aspose.Words شامل موتور اجرای VBA نیستند — پروژه‌های VBA به عنوان داده خوانده و اصلاح می‌شوند (منبع ماژول، مراجع، متادیتای پروژه)، هرگز اجرا نمی‌شوند.

چگونه می‌توانم کد منبع یک ماکرو را بخوانم؟

ماژول را با ایندکس‌گذاری VbaProject.Modules بر اساس نام (مثلاً modules["ModuleName"]) دریافت کنید، سپس ویژگی SourceCode آن را بخوانید.

آیا می‌توانم یک ماژول VBA کاملاً جدید به یک سند اضافه کنم؟

بله — یک VbaModule بسازید و آن را از طریق Add(vbaModule) به VbaModuleCollection پروژه اضافه کنید.

چگونه می‌توانم بررسی کنم که آیا یک سند حتی ماکرو دارد یا نه قبل از پردازش آن؟

Document.HasMacros را بخوانید؛ اگر سند یک پروژه VBA داشته باشد، true است، بدون اینکه ابتدا مجبور به دسترسی به 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 را از سند حذف می‌کند

همچنین ببینید:

 فارسی