פרויקטי 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.HasMacrosלפני שאתה נוגש ב-Document.VbaProjectכדי למנוע טיפול בערכי null במסמכים שמעולם לא היו בהם מאקרו. - התייחס ל-
VbaModule.SourceCodeכטקסט רגיל — מכיוון שאין סביבת ריצה של VBA, עריכה שלו אינה מאמתת את הקוד; VBA פגום עדיין יעבור בתהליך, אך לא ירוץ כראוי ב-Word עד לתיקון. - השתמש ב-
VbaProject.IsSigned/IsProtectedכדי לאתר פרויקטים חתומים או מוגנים לפני שניסיון לשנות את המודולים שלהם. Document.RemoveMacros()היא הדרך הפשוטה ביותר להסיר מאקרוים עבור עותק הפצה “נקי”, במקום לנקות ידנית כל מודול.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
Document.VbaProject הוא null | למסמך אין פרויקט VBA | בדוק תחילה את Document.HasMacros לפני גישה לחברי VbaProject |
מצופה שהמאקרו יופעלו לאחר עריכת 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 והוסף אותו ל-VbaModuleCollection של הפרויקט דרך Add(vbaModule).
איך אני בודק האם למסמך יש מקרוֹות לפני העיבוד שלו?
קרא Document.HasMacros; זה true אם המסמך מכיל פרויקט VBA, מבלי שתצטרך לגשת ל-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 מהמסמך |