Projekty VBA

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.HasMacros przed modyfikacją Document.VbaProject, aby uniknąć obsługi wartości null w dokumentach, które nigdy nie zawierały makr.
  • Traktuj VbaModule.SourceCode jako 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

ProblemPrzyczynaRozwiązanie
Document.VbaProject jest nullDokument nie zawiera projektu VBASprawdź najpierw Document.HasMacros, zanim uzyskasz dostęp do członków VbaProject
Oczekuje się uruchomienia makr po edycji SourceCodeAspose.Words nie ma silnika wykonawczego VBAUż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 nicNiezgodność 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 / MetodaOpis
Document.VbaProjectVbaProject dokumentu, lub null, jeśli nie zawiera makr
Document.HasMacrosCzy projekt VBA jest obecny
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleJeden moduł: Name, Type (VbaModuleType), zapisywalny SourceCode
VbaModuleCollectionAdd(), indeksator według nazwy, Remove(), Count
VbaReference / VbaReferenceCollectionOdwołane biblioteki typów: Type (VbaReferenceType), LibId
Document.RemoveMacros()Usuwa projekt VBA z dokumentu

Zobacz także

 Polski