Projekty VBA
Projekty VBA
Niniejszy przewodnik pokazuje, jak przeglądać i modyfikować projekt VBA osadzony w dokumencie z włączonymi makrami przy użyciu Aspose.Words FOSS dla .NET. Aspose.Words FOSS dla .NET może przeglądać i modyfikować projekt VBA osadzony w dokumencie z włączonymi makrami (.docm) — jego moduły, kod źródłowy i odwołania do bibliotek — za pośrednictwem Document.VbaProject i modelu obiektowego VbaProject/VbaModule. Jest to przegląd i edycja projektu, a nie wykonywanie makr: Aspose.Words nigdy nie zawierał środowiska uruchomieniowego VBA, ani w produkcie komercyjnym, ani w tej edycji FOSS, więc kod VBA jest odczytywany i modyfikowany jako dane, a nie uruchamiany.
Uzyskiwanie dostępu do projektu VBA dokumentu
Document.VbaProject zwraca VbaProject, lub null, jeśli dokument nie zawiera projektu VBA. Document.HasMacros raportuje, czy projekt VBA jest obecny, bez konieczności wcześniejszego uzyskiwania dostępu do VbaProject. VbaProject.Name, CodePage, IsSigned i IsProtected opisują sam projekt.
Odczytywanie i edytowanie modułów
VbaProject.Modules zwraca VbaModuleCollection. Indeksuj go po nazwie, aby odnaleźć konkretny moduł (np. modules["ModuleName"]) lub wyliczyć całą kolekcję. Każdy VbaModule udostępnia swoje Name, Type (a VbaModuleType: DocumentModule, ProceduralModule, ClassModule lub DesignerModule), oraz — co kluczowe — swoje SourceCode jako zapisywalną właściwość typu string, dzięki czemu kod źródłowy modułu może być odczytywany i nadpisywany programowo. VbaModuleCollection.Add(vbaModule) i Remove(module) dodają lub usuwają moduły z projektu.
Odwołania do bibliotek
VbaProject.References zwraca VbaReferenceCollection VbaReference obiektów — biblioteki typów Automation i inne projekty VBA, od których zależy kod makr. VbaReference.Type zgłasza VbaReferenceType (Registered, Project, Original lub Control), a LibId identyfikuje odwoływaną bibliotekę. VbaReferenceCollection.Remove(item) / RemoveAt(index) usuwają odwołania.
Usuwanie projektu VBA
Document.RemoveMacros() usuwa projekt VBA z dokumentu w całości — przydatne do tworzenia kopii dokumentu bez makr, który pierwotnie był dostarczany z makrami.
Wskazówki i najlepsze praktyki
- Sprawdź
Document.HasMacrosprzed modyfikacjąDocument.VbaProject, aby uniknąć obsługi wartości null w dokumentach, które nigdy nie zawierały makr. - Traktuj
VbaModule.SourceCodejako zwykły tekst — ponieważ nie ma środowiska uruchomieniowego VBA, edycja nie weryfikuje kodu; niepoprawny VBA nadal przejdzie przez proces, ale nie będzie działał prawidłowo w Wordzie, dopóki nie zostanie naprawiony. - Użyj
VbaProject.IsSigned/IsProtected, aby wykryć podpisane lub chronione projekty przed próbą modyfikacji ich modułów. Document.RemoveMacros()jest najprostszym sposobem na usunięcie makr w celu uzyskania „czystej” kopii dystrybucyjnej, zamiast ręcznego czyszczenia każdego modułu.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
Document.VbaProject jest null | Dokument nie zawiera projektu VBA | Sprawdź najpierw Document.HasMacros, zanim uzyskasz dostęp do członków VbaProject |
Oczekuje się uruchomienia makr po edycji SourceCode | Aspose.Words nie ma silnika wykonawczego VBA | Użyj tego API, aby jedynie odczytać/modyfikować źródło i strukturę makra; uruchom powstały dokument w środowisku z uruchomionym VBA, takim jak Microsoft Word, aby wykonać kod |
Indeksowanie VbaModuleCollection według nazwy nie zwraca nic | Niezgodność nazwy modułu (wielkość liter lub dokładna pisownia) | Wylicz VbaProject.Modules, aby potwierdzić dokładną nazwę modułu |
FAQ
Czy Aspose.Words FOSS dla .NET może uruchamiać makra VBA w dokumencie?
Nie. Ani ta edycja, ani komercyjny produkt Aspose.Words nie zawierają silnika wykonawczego VBA — projekty VBA są odczytywane i modyfikowane jako dane (źródło modułu, odwołania, metadane projektu), nigdy nie są wykonywane.
Jak odczytać kod źródłowy makra?
Uzyskaj moduł, indeksując VbaProject.Modules po nazwie (np. modules["ModuleName"]), a następnie odczytaj jego właściwość SourceCode.
Czy mogę dodać nowy moduł VBA do dokumentu?
Tak — utwórz VbaModule i dodaj go do VbaModuleCollection projektu za pomocą Add(vbaModule).
Jak sprawdzić, czy dokument w ogóle zawiera makra przed jego przetworzeniem?
Odczytaj Document.HasMacros; jest true, jeśli dokument zawiera projekt VBA, bez konieczności najpierw uzyskiwania dostępu do Document.VbaProject.
Jak usunąć wszystkie makra z dokumentu?
Wywołaj Document.RemoveMacros().
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
Document.VbaProject | VbaProject dokumentu, lub null, jeśli nie zawiera makr |
Document.HasMacros | Czy projekt VBA jest obecny |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Jeden moduł: Name, Type (VbaModuleType), zapisywalny SourceCode |
VbaModuleCollection | Add(), indeksator według nazwy, Remove(), Count |
VbaReference / VbaReferenceCollection | Odwołane biblioteki typów: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Usuwa projekt VBA z dokumentu |