پروژههای 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.VbaProject | VbaProject سند، یا null اگر ماکرو نداشته باشد |
Document.HasMacros | آیا پروژه VBA موجود است |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | یک ماژول: Name, Type (VbaModuleType), قابل نوشتن SourceCode |
VbaModuleCollection | Add(), شاخص بر اساس نام, Remove(), Count |
VbaReference / VbaReferenceCollection | کتابخانههای نوع ارجاعشده: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | پروژه VBA را از سند حذف میکند |