Έργα VBA
Έργα VBA
Αυτός ο οδηγός δείχνει πώς να επιθεωρήσετε και να τροποποιήσετε το έργο VBA που είναι ενσωματωμένο σε ένα έγγραφο με δυνατότητα μακροεντολών χρησιμοποιώντας το Aspose.Words FOSS για .NET. Το Aspose.Words FOSS για .NET μπορεί να επιθεωρήσει και να τροποποιήσει το έργο VBA που είναι ενσωματωμένο σε ένα έγγραφο με δυνατότητα μακροεντολών (.docm) — τα modules του, τον πηγαίο κώδικα και τις βιβλιοθήκες αναφοράς — μέσω του Document.VbaProject και του μοντέλου αντικειμένων VbaProject/VbaModule. Πρόκειται για επιθεώρηση και επεξεργασία του έργου, όχι για εκτέλεση μακροεντολών: το Aspose.Words δεν περιέχει ποτέ χρόνο εκτέλεσης VBA, ούτε στο εμπορικό προϊόν ούτε σε αυτή την έκδοση FOSS, έτσι ο κώδικας VBA διαβάζεται και τροποποιείται ως δεδομένα, όχι εκτελείται.
Πρόσβαση στο VBA Project ενός εγγράφου
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ως απλό κείμενο — επειδή δεν υπάρχει runtime VBA, η επεξεργασία του δεν επικυρώνει τον κώδικα· εσφαλμένο VBA θα περάσει ακόμη και στο round-trip, αλλά δεν θα εκτελεστεί σωστά στο Word μέχρι να διορθωθεί. - Χρησιμοποιήστε το
VbaProject.IsSigned/IsProtectedγια να εντοπίσετε υπογεγραμμένα ή προστατευμένα έργα πριν επιχειρήσετε να τροποποιήσετε τις μονάδες τους. Document.RemoveMacros()είναι ο πιο απλός τρόπος για να αφαιρέσετε τις μακροεντολές για ένα “καθαρό” αντίγραφο διανομής, αντί να καθαρίζετε χειροκίνητα κάθε μονάδα.
Κοινά προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
Document.VbaProject είναι null | Το έγγραφο δεν έχει έργο VBA | Ελέγξτε πρώτα το Document.HasMacros πριν αποκτήσετε πρόσβαση στα μέλη του VbaProject |
Αναμένεται να εκτελεστούν οι μακροεντολές μετά την επεξεργασία του SourceCode | Aspose.Words δεν έχει μηχανή εκτέλεσης VBA | Χρησιμοποιήστε αυτό το API μόνο για ανάγνωση/τροποποίηση του κώδικα και της δομής των μακροεντολών· εκτελέστε το προκύπτον έγγραφο σε περιβάλλον με χρόνο εκτέλεσης VBA, όπως το 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 από το έγγραφο |