VBA GetObject | Πώς να χρησιμοποιήσετε τη λειτουργία GetObject στο Excel VBA;
Λειτουργία Excel VBA GETOBJECT
Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση GetObject στο VBA στο MS Excel για να αποκτήσουμε πρόσβαση σε ένα αντικείμενο ActiveX από το αρχείο excel και μετά να αντιστοιχίσουμε το αντικείμενο σε μια μεταβλητή αντικειμένου. Για να χρησιμοποιήσουμε την τεχνολογία OLE (Object Linking and Embedding) ή COM (Compound Object Module) για τον έλεγχο οποιασδήποτε εφαρμογής Microsoft όπως MS Word, MS Outlook, MS PowerPoint και Internet Explorer κ.λπ., μπορούμε να χρησιμοποιήσουμε τη λειτουργία VBA GETOBJECT.
Χρησιμοποιούμε τη συνάρτηση CreateObject για να δημιουργήσουμε το αντικείμενο και η συνάρτηση GETOBJECT επιστρέφει την αναφορά στο αντικείμενο.
Σύνταξη για τη συνάρτηση GETOBJECT
Η συνάρτηση GET OBJECT έχει αυτά τα ονομαστικά ορίσματα:
- Όνομα διαδρομής: Πρέπει να καθορίσουμε την πλήρη διαδρομή και το όνομα του αρχείου που περιέχει το αντικείμενο για ανάκτηση. Αυτό είναι ένα προαιρετικό όρισμα, στην πραγματικότητα, και τα δύο ορίσματα στη συνάρτηση GetObject είναι προαιρετικά, αλλά εάν παραλείπεται το "pathname", απαιτείται το δεύτερο όρισμα "class".
- Κλάση : Αυτό είναι επίσης ένα προαιρετικό επιχείρημα, όπως ορίστηκε επίσης νωρίτερα. Αυτό δέχεται μια συμβολοσειρά που αντιπροσωπεύει την κλάση του αντικειμένου.
Χρησιμοποιούμε τη σύνταξη «appname.objecttype» για να καθορίσουμε το όρισμα «class».
- Όνομα εφαρμογής: Πρέπει να καθορίσουμε το όνομα της εφαρμογής, το οποίο θα παρέχει το αντικείμενο.
- Τύπος αντικειμένου: Καθορίζουμε τον τύπο κλάσης αντικειμένου που θα δημιουργηθεί.
Παράδειγμα της συνάρτησης Excel VBA GETOBJECT
Μπορείτε να κατεβάσετε αυτό το Πρότυπο GetObject VBA εδώ - Πρότυπο VBA GetObjectΑς υποθέσουμε, έχουμε ένα έγγραφο λέξεων που περιέχει 3 πίνακες.
Θέλουμε να γράψουμε έναν κωδικό VBA που θα εισάγει όλους τους πίνακες του εγγράφου στο φύλλο excel. Για να κάνουμε το ίδιο, θα πρέπει να χρησιμοποιήσουμε τη λειτουργία CreateObject και GetObject στο VBA.
Τα βήματα θα ήταν:
- Δημιουργήστε ένα αρχείο excel και αποθηκεύστε το αρχείο με την επέκταση excel .xlsm (Excel Macro-Enabled Workbook) καθώς θα χρειαστεί να εκτελέσουμε τον κώδικα VBA (μια μακροεντολή).
- Ανοίξτε το πρόγραμμα επεξεργασίας οπτικών βασικών με ένα πλήκτρο συντόμευσης (Alt + F11) ή χρησιμοποιώντας την εντολή «Visual Basic» στην ομάδα «Κωδικός» στην καρτέλα «Προγραμματιστής» στο excel.
- Κάντε διπλό κλικ στο "ThisWorkbook" στην αριστερή πλευρά του προγράμματος επεξεργασίας VBA και επιλέξτε "Workbook" από τη λίστα που εμφανίζεται στη συνέχεια στο πάνω μέρος της οθόνης.
- Επιλέξτε "Άνοιγμα" από τη λίστα.
- Τώρα πρέπει να γράψουμε τον κωδικό ανάμεσα σε αυτές τις δύο γραμμές.
- Πρώτον, θα δηλώσουμε μεταβλητές για να κρατήσουμε τα αντικείμενα (MS Word Document και MS Word Application αντικείμενο) και μια «String Variable» για να κρατήσουμε το όνομα του εγγράφου από το οποίο πρέπει να εξαγάγουμε τους πίνακες.
- Για χειρισμό σφαλμάτων, θα προσθέσουμε μία δήλωση, αυτή η δήλωση λέει στο πρόγραμμα VBA να αγνοήσει το σφάλμα και να συνεχίσει την εκτέλεση με την επόμενη γραμμή κώδικα. Η δήλωση "On Error Resume Next" δεν διορθώνει τα σφάλματα χρόνου εκτέλεσης, αλλά απλά σημαίνει ότι η εκτέλεση του προγράμματος θα συνεχιστεί από τη γραμμή που ακολουθεί τη γραμμή που προκάλεσε το σφάλμα.
- Τώρα θα χρησιμοποιήσουμε τη συνάρτηση GetObject για να αποκτήσουμε πρόσβαση στην τρέχουσα παρουσία του Word Application Object.
- Σε περίπτωση που δεν υπάρχει τρέχουσα παρουσία της εφαρμογής MS Word ή το στοιχείο ActiveX δεν μπορεί να δημιουργήσει ένα αντικείμενο ή να επιστρέψει αναφορά σε αυτό το αντικείμενο, τότε το σφάλμα 429. Για αυτό, θα προσθέσουμε παρακάτω δύο γραμμές στον κώδικα. Αφού χειριστούμε το σφάλμα, πρέπει να δημιουργήσουμε μια παρουσία του αντικειμένου εφαρμογής MS Word χρησιμοποιώντας τη συνάρτηση CreateObject .
- Για να κάνουμε την εφαρμογή MS Word ορατή, θα αλλάξουμε την ορατή ιδιότητα του αντικειμένου «WdApp» σε TRUE .
- Πρέπει να βρούμε την τοποθεσία και το όνομα αρχείου του εγγράφου λέξεων από το οποίο θέλουμε να εισάγουμε τους πίνακες σε ένα φύλλο excel και να αντιστοιχίσουμε το ίδιο στο "strDocName" Για να βρούμε το όνομα και την τοποθεσία, μπορούμε να ελέγξουμε τις ιδιότητες του αρχείου .
Για να ανοίξετε το παράθυρο διαλόγου "Ιδιότητες" , απλώς επιλέξτε το αρχείο και πατήστε "Alt + Enter" .
- Εάν το αρχείο δεν υπάρχει στην καθορισμένη θέση, τότε ο κώδικας επιστρέφει το μήνυμα που αναφέρει "Το αρχείο επισημαίνει τις λεπτομέρειες δεν βρέθηκε στη διαδρομή φακέλου" Ο τίτλος θα ήταν "Συγγνώμη, αυτό το όνομα εγγράφου δεν υπάρχει."
- Τώρα πρέπει να ενεργοποιήσουμε την εφαρμογή MS Word και να αντιστοιχίσουμε τη μεταβλητή «wddoc» με το έγγραφο λέξεων που έχει το όνομα αρχείου αποθηκευμένο στο «strDocName» .
- Εάν το αρχείο δεν έχει ήδη ανοίξει, τότε πρέπει να ανοίξουμε το έγγραφο και να ενεργοποιήσουμε την εφαρμογή.
- Μετά την ενεργοποίηση του εγγράφου λέξεων, πρέπει να έχουμε πρόσβαση στους πίνακες του εγγράφου. Για να κάνουμε το ίδιο, θα δημιουργήσουμε μερικές μεταβλητές.
Το Tble είναι η ακέραια μεταβλητή, η οποία θα αποθηκεύει τον αριθμό πινάκων στο έγγραφο.
Το rowWd είναι η μεγάλη μεταβλητή, η οποία θα αποθηκεύσει τον αριθμό των σειρών σε έναν συγκεκριμένο πίνακα.
Το colWd είναι η μεγάλη μεταβλητή, η οποία θα αποθηκεύσει τον αριθμό των στηλών σε έναν συγκεκριμένο πίνακα.
- Πρέπει να μετρήσουμε τον αριθμό των πινάκων στο έγγραφο και εάν δεν υπάρχει πίνακας στο έγγραφο τότε θα εμφανιστεί ένα πλαίσιο μηνύματος στον χρήστη ότι «Δεν βρέθηκαν πίνακες στο έγγραφο του Word» .
- Για να αποκτήσετε πρόσβαση σε πίνακες στο έγγραφο και να γράψετε το περιεχόμενο στο φύλλο excel, θα εκτελέσουμε έναν βρόχο «Για» VBA για αρκετούς πίνακες φορές και εντός αυτού του βρόχου VBA, θα τρέξουμε ένθετους «για» βρόχους για πρόσβαση σε κάθε σειρά και κάθε στήλη στη σειρά.
- Καθώς δεν θέλουμε να αποθηκεύσουμε το έγγραφο και να κλείσουμε την εφαρμογή. Πρέπει επίσης να απελευθερώσουμε τη μνήμη του συστήματος. Για να κάνουμε το ίδιο, θα γράψουμε τον ακόλουθο κώδικα.
Τώρα όποτε ανοίγουμε το αρχείο excel, το γέμισμα ενημερώνεται με περιεχόμενο πίνακα από το έγγραφο του Word.
Κώδικας:
Private Sub Workbook_Open () Rem Declating Object variables to access object που δημιουργήθηκε από το GETOBJECT Dim WdApp As Object, wddoc As Object Rem Δηλώνει μια μεταβλητή συμβολοσειράς για πρόσβαση στο έγγραφο του Word Dim strDocName As String Rem Σφάλμα χειρισμού On Error Resume Next Rem Ενεργοποίηση MS Word εάν έχει ήδη ανοίξει Set WdApp = GetObject (, "Word.Application") Εάν Err.Number = 429 Τότε Err.Clear Rem Δημιουργία αντικειμένου εφαρμογής Word εάν το MS Word δεν έχει ήδη ανοίξει Ορίστε WdApp = CreateObject ("Word.Application") Τέλος Εάν WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Έλεγχος σχετικού καταλόγου για το σχετικό έγγραφο Rem Εάν δεν βρεθεί, ενημερώστε τον χρήστη και κλείστε το πρόγραμμα If Dir (strDocName) = " "Στη συνέχεια MsgBox" Το αρχείο "& strDocName & vbCrLf &"δεν βρέθηκε στη διαδρομή του φακέλου "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Λυπούμαστε, αυτό το όνομα εγγράφου δεν υπάρχει. "Έξοδος από το Sub End Εάν το WdApp.Activate Set wddoc = WdApp.Documents (strDocName Εάν το wddoc δεν είναι τίποτα τότε ορίστε wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc. Ενεργοποιήστε μεταβλητές Καθορισμού Rem για πρόσβαση στους πίνακες στο έγγραφο λέξεων Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 With wddoc Tble = wddoc.Tables.Count If Tble = 0 Τότε MsgBox "Δεν βρέθηκαν πίνακες στο έγγραφο του Word", vbExclamation, "Όχι Πίνακες για εισαγωγή "Exit Sub End if Rem Ξεκινώντας τη διαδικασία βρόχου για πρόσβαση σε πίνακες και τις σειρές τους, στήλες Για i = 1 έως Tble με. Πίνακες (i) Για rowWd = 1 έως. Rows.Count Για colWd = 1 Προς. Στήλες.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Πρόσβαση στην επόμενη στήλη y = y + 1 Επόμενο colWd Rem Μετάβαση στην επόμενη σειρά και έναρξη από τη στήλη 1 y = 1 x = x + 1 Επόμενη σειράWd End With Next End With Rem δεν χρειάζεται να αποθηκεύσουμε το έγγραφο λέξης wddoc. Κλείσιμο Savechanges: = False Rem τερματίσαμε την εφαρμογή MS Word WdApp.Quit Rem Τελικά απελευθερώνουμε τη μνήμη συστήματος που έχει εκχωρηθεί για τις 2 μεταβλητές αντικειμένου Set wddoc = Τίποτα δεν έχει οριστεί WdApp = Τίποτα δεν τελειώνει υποΤερματισμός Rem Απελευθερώνουμε επιτέλους τη μνήμη συστήματος που έχει εκχωρηθεί για τις 2 μεταβλητές αντικειμένων Set wddoc = Nothing Set WdApp = Nothing End SubΤερματισμός Rem Απελευθερώνουμε επιτέλους τη μνήμη συστήματος που έχει εκχωρηθεί για τις 2 μεταβλητές αντικειμένων Set wddoc = Nothing Set WdApp = Nothing End Sub
Πράγματα που πρέπει να θυμάστε
- Υπάρχει κάποιο αντικείμενο μιας παρουσίας, για το οποίο δημιουργείται μόνο μία παρουσία του αντικειμένου, ανεξάρτητα από τον αριθμό για τον οποίο εκτελείται το CreateObject. Η συνάρτηση GetObject επιστρέφει ανά πάσα στιγμή την ίδια παρουσία όταν καλείται με μια συμβολοσειρά μηδενικού μήκους και εμφανίζεται ένα σφάλμα εάν δεν αναφέρεται το όρισμα «pathname»
- Δεν μπορούμε να χρησιμοποιήσουμε το GetObject για πρόσβαση σε μια αναφορά σε μια τάξη που δημιουργήθηκε με το VBA.
- Σε περίπτωση που δεν υπάρχει ενεργή παρουσία της εφαρμογής MS Word ή δεν θέλουμε το αντικείμενο να ξεκινήσει με ένα αρχείο που έχει ήδη φορτωθεί, τότε χρησιμοποιούμε πρώτα τη συνάρτηση CreateObject για να δημιουργήσουμε το αντικείμενο και στη συνέχεια χρησιμοποιήστε τη συνάρτηση GetObject για πρόσβαση στο αντικείμενο.