Проекти VBA

Проекти 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
Очікується, що макроси запрацюють після редагування 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-проект із документа

Дивіться також

 Українська