Проекти 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-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.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-проект із документа |