VBA-Projekte

VBA-Projekte

Dieser Leitfaden zeigt, wie man das in einem makrofähigen Dokument eingebettete VBA-Projekt mit Aspose.Words FOSS für .NET inspiziert und modifiziert. Aspose.Words FOSS für .NET kann das in einem makrofähigen Dokument (.docm) eingebettete VBA-Projekt — seine Module, den Quellcode und die Bibliotheksreferenzen — über Document.VbaProject und das VbaProject/VbaModule-Objektmodell inspizieren und modifizieren. Dabei handelt es sich um Projektinspektion und -bearbeitung, nicht um Makroausführung: Aspose.Words hat weder im kommerziellen Produkt noch in dieser FOSS-Edition jemals eine VBA-Laufzeit enthalten, sodass VBA-Code als Daten gelesen und geändert, aber nicht ausgeführt wird.


Zugriff auf das VBA-Projekt eines Dokuments

Document.VbaProject gibt ein VbaProject zurück, oder null, wenn das Dokument kein VBA-Projekt enthält. Document.HasMacros meldet, ob ein VBA-Projekt vorhanden ist, ohne dass Sie zuerst VbaProject aufrufen müssen. VbaProject.Name, CodePage, IsSigned und IsProtected beschreiben das Projekt selbst.


Lesen und Bearbeiten von Modulen

VbaProject.Modules gibt ein VbaModuleCollection zurück. Indizieren Sie es nach Namen, um ein bestimmtes Modul zu finden (z.B. modules["ModuleName"]), oder um die gesamte Sammlung zu enumerieren. Jeder VbaModule stellt sein Name, sein Type (ein VbaModuleType: DocumentModule, ProceduralModule, ClassModule oder DesignerModule) und — entscheidend — sein SourceCode als schreibbare String-Eigenschaft zur Verfügung, sodass der Quellcode des Moduls programmgesteuert gelesen und neu geschrieben werden kann. VbaModuleCollection.Add(vbaModule) und Remove(module) fügen dem Projekt Module hinzu oder entfernen sie.


Bibliotheksreferenzen

VbaProject.References gibt ein VbaReferenceCollection von VbaReference Objekten zurück — die Automation-Typbibliotheken und andere VBA-Projekte, von denen der Makrocode abhängt. VbaReference.Type meldet einen VbaReferenceType (Registered, Project, Original oder Control) und LibId identifiziert die referenzierte Bibliothek. VbaReferenceCollection.Remove(item) / RemoveAt(index) entfernen Referenzen.


Entfernen eines VBA-Projekts

Document.RemoveMacros() entfernt das VBA-Projekt vollständig aus einem Dokument — nützlich, um eine makrofrei Kopie eines Dokuments zu erzeugen, das ursprünglich mit Makros ausgeliefert wurde.


Tipps und bewährte Verfahren

  • Prüfen Sie Document.HasMacros bevor Sie Document.VbaProject ändern, um Null-Behandlungen bei Dokumenten zu vermeiden, die nie Makros hatten.
  • Betrachten Sie VbaModule.SourceCode als Klartext — da keine VBA-Laufzeit vorhanden ist, validiert das Bearbeiten den Code nicht; fehlerhaftes VBA wird weiterhin durchgereicht, läuft jedoch in Word nicht korrekt, bis es korrigiert wurde.
  • Verwenden Sie VbaProject.IsSigned/IsProtected, um signierte oder geschützte Projekte zu erkennen, bevor Sie versuchen, deren Module zu ändern.
  • Document.RemoveMacros() ist der einfachste Weg, Makros für eine “clean” Distributionskopie zu entfernen, anstatt jedes Modul manuell zu leeren.

Häufige Probleme

ProblemUrsacheLösung
Document.VbaProject ist nullDas Dokument hat kein VBA-ProjektÜberprüfen Sie Document.HasMacros zuerst, bevor Sie auf VbaProject-Mitglieder zugreifen
Erwartet, dass Makros nach dem Bearbeiten von SourceCode ausgeführt werdenAspose.Words hat keine VBA-AusführungsengineVerwenden Sie dieses API, um nur den Makro-Quellcode und die Struktur zu lesen/zu ändern; führen Sie das resultierende Dokument in einer Umgebung mit einer VBA-Laufzeit aus, wie Microsoft Word, um den Code auszuführen
Das Indexieren von VbaModuleCollection nach Name liefert nichtsModulname stimmt nicht überein (Groß-/Kleinschreibung oder exakte Schreibweise)Durchsuchen Sie VbaProject.Modules, um den genauen Modulnamen zu bestätigen

FAQ

Kann Aspose.Words FOSS für .NET VBA-Makros in einem Dokument ausführen?

Nein. Weder diese Edition noch das kommerzielle Aspose.Words-Produkt enthalten eine VBA-Ausführungsengine — VBA-Projekte werden als Daten (Modul-Quellcode, Verweise, Projekt-Metadaten) gelesen und geändert, niemals ausgeführt.

Wie lese ich den Quellcode eines Makros?

Rufen Sie das Modul ab, indem Sie VbaProject.Modules nach Namen indizieren (z.B. modules["ModuleName"]), und lesen Sie anschließend seine SourceCode-Eigenschaft.

Kann ich ein brandneues VBA-Modul zu einem Dokument hinzufügen?

Ja — erstellen Sie ein VbaModule und fügen Sie es über Add(vbaModule) zum VbaModuleCollection des Projekts hinzu.

Wie prüfe ich, ob ein Dokument überhaupt Makros enthält, bevor ich es verarbeite?

Lese Document.HasMacros; es ist true, wenn das Dokument ein VBA-Projekt enthält, ohne dass Sie zuerst auf Document.VbaProject zugreifen müssen.

Wie entferne ich alle Makros aus einem Dokument?

Rufe Document.RemoveMacros() auf.


API Reference Zusammenfassung

Klasse / MethodeBeschreibung
Document.VbaProjectDas VbaProject des Dokuments oder null, wenn es keine Makros enthält
Document.HasMacrosOb ein VBA-Projekt vorhanden ist
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleEin Modul: Name, Type (VbaModuleType), schreibbar SourceCode
VbaModuleCollectionAdd(), indexer nach Name, Remove(), Count
VbaReference / VbaReferenceCollectionReferenzierte Typbibliotheken: Type (VbaReferenceType), LibId
Document.RemoveMacros()Entfernt das VBA-Projekt aus dem Dokument

Siehe auch

 Deutsch