Έργα 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
Αναμένεται να εκτελεστούν οι μακροεντολές μετά την επεξεργασία του SourceCodeAspose.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
VbaProjectName, Modules, References, CodePage, IsSigned, IsProtected
VbaModuleΜία μονάδα: Name, Type (VbaModuleType), εγγράψιμη SourceCode
VbaModuleCollectionAdd(), ευρετήριο κατά όνομα, Remove(), Count
VbaReference / VbaReferenceCollectionΑναφερόμενες βιβλιοθήκες τύπων: Type (VbaReferenceType), LibId
Document.RemoveMacros()Αφαιρεί το έργο VBA από το έγγραφο

Δείτε επίσης

 Ελληνικά