Βασικές πληροφορίες σχετικά με την αυτοματοποίηση OLE χρησιμοποιώντας VBA στο Microsoft Excel

Anonim

Όταν θέλετε να χρησιμοποιήσετε λειτουργικότητα από άλλες εφαρμογές, πρέπει να αποφασίσετε εάν θέλετε να το χρησιμοποιήσετε
έγκαιρη ή καθυστερημένη δέσμευση μεταβλητών αντικειμένου.

Πρώιμο δέσιμο

Η δέσμευση μεταξύ της μεταβλητής αντικειμένου και του αντικειμένου πραγματοποιείται όταν μεταγλωττιστεί η εφαρμογή.
Αυτό οδηγεί σε καλύτερη απόδοση σε σύγκριση με όταν η δέσμευση πραγματοποιείται κατά την εκτέλεση της εφαρμογής (καθυστέρηση σύνδεσης).
Εάν θέλετε να δημιουργήσετε μια έγκαιρη δέσμευση, πρέπει να ορίσετε μια αναφορά στη βιβλιοθήκη "ξένων" αντικειμένων που θέλετε να χρησιμοποιήσετε.
Αυτό γίνεται από το VBE χρησιμοποιώντας το μενού Εργαλεία, Αναφορές…. Όταν ένα VBProject έχει αναφορά σε ένα
βιβλιοθήκη αντικειμένων μπορείτε να δηλώσετε συγκεκριμένες μεταβλητές αντικειμένων (π.χ. Dim oDoc As Word.Document). Αυτό θα τα καταφέρει επίσης
ευκολότερο να προγραμματίσετε τα "ξένα αντικείμενα" αφού το VBE θα εμφανίσει την ίδια βοήθεια προγραμματισμού όσον αφορά τις ιδιότητες,
μεθόδους και συμβάντα που εμφανίζει για τα αντικείμενα που ανήκουν στην εφαρμογή που εργάζεστε
από (το VBE έχει προσθέσει αυτόματα την αναφορά σε αυτήν την εφαρμογή εκ των προτέρων).
Αυτό είναι ένα γενικό παράδειγμα κώδικα που δείχνει σφάλμα αυτοματισμού vba:

Sub OLEAutomationEarlyBinding () »αντικαταστήστε το xxx με ένα από τα ακόλουθα:« Access, Excel, Outlook, PowerPoint ή Word Dim oApp As xxx.Application »زود δεσμευτική Dim oDoc As xxx.Document 'Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation , Word.Document On Error Συνέχιση Επόμενο 'αγνοήστε τα σφάλματα Ορίστε oApp = GetObject (, "xxx.Application")' αναφορά σε υπάρχουσα περίπτωση εφαρμογής Εάν το oApp δεν είναι τίποτα τότε 'δεν εκτελείται καμία υπάρχουσα εφαρμογή Set oApp = New xxx.Application' create a νέα εφαρμογή εφαρμογής Τέλος Αν Ενεργ. Σφάλμα GoTo 0 'συνέχιση κανονικού χειρισμού σφαλμάτων Εάν το oApp δεν είναι τίποτα Τότε' δεν είναι σε θέση να δημιουργήσει την εφαρμογή MsgBox "Η εφαρμογή δεν είναι διαθέσιμη!", vbExclamation End If With oApp .Visible = True 'κάντε την εφαρμογή αντικείμενο ορατό "σε αυτό το σημείο η εφαρμογή είναι ορατή" κάντε κάτι ανάλογα με την εφαρμογή … Ορίστε oDoc = .Documents.Open ("c: \ foldername \ filename.doc") "ανοίξτε ένα έγγραφο"… oDoc.Close True "κλείστε και αποθηκεύστε το έγγραφο .Κλείστε την εφαρμογή Τέλος με Σετ oDoc = Τίποτα «ελεύθερη μνήμη Σετ oApp = Τίποτα» δωρεάν μνήμη Τέλος υπο

Αργά δέσιμο

Η δέσμευση μεταξύ της μεταβλητής αντικειμένου και του αντικειμένου πραγματοποιείται όταν εκτελείται η εφαρμογή.
Αυτό έχει ως αποτέλεσμα πιο αργή απόδοση σε σύγκριση με τη στιγμή που πραγματοποιείται η δέσμευση κατά τη σύνταξη της εφαρμογής (πρώιμη σύνδεση).
Εάν δεν προσθέσετε μια αναφορά στη βιβλιοθήκη αντικειμένων που ανήκει στην "ξένη" εφαρμογή, πρέπει
δηλώστε γενικές μεταβλητές αντικειμένου (π.χ. Dim oDoc Ως αντικείμενο). Αυτό θα κάνει πιο δύσκολο τον προγραμματισμό
τα "ξένα αντικείμενα" αφού το VBE δεν θα εμφανίζει την ίδια βοήθεια προγραμματισμού όσον αφορά τις ιδιότητες,
μεθόδους και συμβάντα που εμφανίζει για τα αντικείμενα που ανήκουν στην εφαρμογή από την οποία εργάζεστε.
Αυτό είναι ένα γενικό παράδειγμα κώδικα:

Sub OLEAutomationLateBinding () 'αντικαταστήστε το xxx με ένα από τα ακόλουθα:' Access, Excel, Outlook, PowerPoint ή Word Dim oApp As Object 'late binding Dim oDoc As Object' late binding On Error Resume Next 'αγνοήστε τα σφάλματα Set oApp = GetObject (, "xxx.Application") 'αναφορά σε υπάρχουσα περίπτωση εφαρμογής Εάν το oApp δεν είναι τίποτα Τότε' δεν εκτελείται καμία υπάρχουσα εφαρμογή Ορίστε oApp = CreateObject ("xxx.Application") 'δημιουργήστε μια νέα εφαρμογή εφαρμογής Τέλος Αν σε Σφάλμα GoTo 0' συνεχίστε το κανονικό σφάλμα χειρισμός Αν το oApp δεν είναι τίποτα Τότε "δεν μπορώ να δημιουργήσω την εφαρμογή MsgBox" Η εφαρμογή δεν είναι διαθέσιμη! ", vbExclamation Τέλος Αν Με oApp .Visible = True" κάντε το αντικείμενο της εφαρμογής ορατό "σε αυτό το σημείο η εφαρμογή είναι ορατή" κάντε κάτι ανάλογα στην εφαρμογή… Ορισμός oDoc = .Documents.Open ("c: \ foldername \ filename.doc") 'άνοιγμα εγγράφου'… oDoc.Close True 'κλείσιμο και αποθήκευση του εγγράφου. Κλείσιμο' κλείσιμο της εφαρμογής Τέλος με ρύθμιση oDoc = Τίποτα 'ελεύθερη μνήμη Ρύθμιση oApp = Τίποτα' fr ee memory End Sub