Συμπτώματα
Όταν εκτελείτε κώδικα της Microsoft Visual Basic που χρησιμοποιεί αυτοματοποίηση για τον έλεγχο της Microsoft Word, ενδέχεται να λάβετε ένα από τα ακόλουθα μηνύματα σφάλματος:
Μήνυμα σφάλματος 1Σφάλμα χρόνου εκτέλεσης '-2147023174' (800706ba)
Σφάλμα αυτοματισμούΜήνυμα σφάλματος 2
Σφάλμα χρόνου εκτέλεσης '462': Ο απομακρυσμένος υπολογιστής διακομιστή δεν υπάρχει ή δεν είναι διαθέσιμος
Αιτία
Η Visual Basic έχει δημιουργήσει μια αναφορά σε Word λόγω μιας γραμμής κώδικα που καλεί ένα αντικείμενο, μέθοδο ή ιδιότητα Word χωρίς να το πληροί τις προϋποθέσεις με μεταβλητή αντικειμένου Word. Η Visual Basic δεν κυκλοφορεί αυτή την αναφορά μέχρι να τερματίσετε το πρόγραμμα. Αυτή η εσφαλμένη αναφορά επηρεάζει τον κώδικα αυτοματισμού όταν ο κώδικας εκτελείται περισσότερες από μία φορές.
Επίλυση
Τροποποιήστε τον κώδικα, έτσι ώστε κάθε κλήση σε ένα Word αντικείμενο, μέθοδο ή ιδιότητα να προσδιορίζεται με την κατάλληλη μεταβλητή αντικειμένου.
Κατάσταση
Αυτή η συμπεριφορά οφείλεται στη σχεδίαση.
Περισσότερες πληροφορίες
Για να αυτοματοποιήσετε Word, δημιουργείτε μια μεταβλητή αντικειμένου που συνήθως αναφέρεται στο αντικείμενο Word Εφαρμογή ή Έγγραφο. Στη συνέχεια, μπορείτε να ορίσετε άλλες μεταβλητές αντικειμένου ώστε να αναφέρονται σε μια Επιλογή, μια Περιοχή ή άλλα αντικείμενα στο μοντέλο αντικειμένου Word. Όταν γράφετε κώδικα για να χρησιμοποιήσετε ένα αντικείμενο, μέθοδο ή ιδιότητα Word, θα πρέπει πάντα να προηγείτε της κλήσης με την κατάλληλη μεταβλητή αντικειμένου. Εάν δεν το κάνετε, η Visual Basic χρησιμοποιεί μια κρυφή αναφορά καθολικής μεταβλητής την οποία ορίζει στην τρέχουσα παρουσία που εκτελείται. Εάν Word είναι τερματισμός λειτουργίας ή εάν αποδεσμευθεί η δηλωμένη μεταβλητή αντικειμένου, η κρυφή καθολική μεταβλητή θα αναφέρεται τώρα σε ένα μη έγκυρο (κατεστραμμένο) αντικείμενο. Κατά την εκ νέου εκτέλεση του κώδικα αυτοματισμού, οι κλήσεις σε αυτήν τη μεταβλητή κρυφού αντικειμένου θα αποτύχουν με το προαναφερθέν σφάλμα.
Τα παρακάτω βήματα δείχνουν πώς μπορείτε να αναπαραγάγετε αυτό το πρόβλημα και πώς μπορείτε να το διορθώσετε.Βήματα για την αναπαραγωγή συμπεριφοράς
-
Ξεκινήστε ένα νέο έργο Standard EXE στη Visual Basic. Η φόρμα1 δημιουργείται από προεπιλογή.
-
Κάντε κλικ στην επιλογή Αναφορές από το μενού Έργο και, στη συνέχεια, κάντε κλικ σε μία από τις ακόλουθες επιλογές:
-
Για το Office Word 2007, κάντε κλικ στην επιλογή Βιβλιοθήκη αντικειμένων Microsoft Word 12.0
-
Για Word 2003, κάντε κλικ στην επιλογή Βιβλιοθήκη αντικειμένων Microsoft Word 11.0
-
Για Word 2003, κάντε κλικ στην επιλογή Βιβλιοθήκη αντικειμένων microsoft Word 10.0
-
Για Word 2000, κάντε κλικ στην επιλογή Βιβλιοθήκη αντικειμένων microsoft Word 9.0.
-
Για Word 97, κάντε κλικ στην επιλογή Βιβλιοθήκη αντικειμένων Microsoft Word 8.0.
-
-
Τοποθετήστε ένα κουμπί CommandButton στο Form1.
-
Αντιγράψτε τον παρακάτω κώδικα στο παράθυρο κώδικα της φόρμας1:
Option Explicit Private Sub Command1_Click() Dim oWord As Word.Application Dim oDoc As Word.Document Dim oRange as Word.Range Set oWord = CreateObject("Word.Application") With oWord .Visible = True .Activate .WindowState = wdWindowStateNormal End With Set oDoc = oWord.Documents.Add MsgBox "Document open", vbMsgBoxSetForeground With oDoc .PageSetup.LeftMargin = InchesToPoints(1.25) End With ' This example inserts text at the end of section one. Set oRange = ActiveDocument.Sections(1).Range With oRange .MoveEnd Unit:=wdCharacter, Count:= -1 .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .InsertAfter "End of section." End With With oDoc .Saved = True End With Set oRange = Nothing Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub
-
Στο μενού Εκτέλεση , κάντε κλικ στην Έναρξη ή πατήστε το πλήκτρο F5 για να ξεκινήσετε το πρόγραμμα.
-
Κάντε κλικ στο κουμπί CommandButton. Δεν εμφανίζεται σφάλμα. Ωστόσο, έχει δημιουργηθεί μια αναφορά σε Word και δεν έχει κυκλοφορήσει.
-
Κάντε ξανά κλικ στο κουμπί CommandButton και σημειώστε ότι λαμβάνετε το σφάλμα που περιγράφηκε προηγουμένως.
Σημείωση Το σφάλμα παρουσιάζεται επειδή ο κώδικας αναφέρεται στη μέθοδο InchesToPoints χωρίς να προηγείται της κλήσης με τη μεταβλητή αντικειμένου oWord. -
Διακόψτε το έργο και αλλάξτε την ακόλουθη γραμμή:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-Να-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Εκτελέστε ξανά το πρόγραμμα. Στη συνέχεια, κάντε κλικ στο κουμπί CommandButton. Δεν εμφανίζεται σφάλμα.
-
Κάντε κλικ στο κουμπί CommandButton ξανά και σημειώστε ότι λαμβάνετε το σφάλμα.
Σημείωση Το σφάλμα παρουσιάζεται επειδή ο κώδικας αναφέρεται στο αντικείμενο περιοχής της ενότητας ActiveDocument, χωρίς να προηγείται της κλήσης με τη μεταβλητή αντικειμένου oWord. -
Διακόψτε το έργο και αλλάξτε την ακόλουθη γραμμή:
Set oRange = ActiveDocument.Sections(1).Range
-Να-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Εκτελέστε ξανά το πρόγραμμα. Λάβετε υπόψη ότι μπορείτε να εκτελέσετε τον κωδικό πολλές φορές χωρίς σφάλμα.
Όταν δημιουργείτε ένα έργο της Visual Basic που αυτοματοποιεί Word, εάν το έργο σας έχει μια αναφορά στη Βιβλιοθήκη αντικειμένων microsoft Word, δείγμα κώδικα για τα αντικείμενα, τις μεθόδους και τις ιδιότητες του μοντέλου αντικειμένων Word είναι διαθέσιμο από το αρχείο της Βοήθειας Word. Όταν ο δρομέας βρίσκεται πάνω από μια λέξη-κλειδί στον κώδικά σας, θα δείτε οποιοδήποτε κείμενο της Βοήθειας που ισχύει πατώντας το πλήκτρο F1.
Το δείγμα κώδικα στο θέμα της Βοήθειας θα είναι ο κωδικός Word Visual Basic for Applications της Microsoft. Δεν θα εμφανίζει τις αναφορές αντικειμένων που απαιτεί ο κώδικας της Visual Basic. Θα πρέπει να προσθέσετε τα προσδιοριστικά ανάλογα με την περίπτωση.Αναφορές
Για περισσότερες πληροφορίες, ανατρέξτε στα ακόλουθα άρθρα στη Γνωσιακή βάση της Microsoft:
178510 PRB: Η μέθοδος αυτοματοποίησης αντικειμένου "_Global" απέτυχε
Για πρόσθετες πληροφορίες σχετικά με την Αυτοματοποίηση εφαρμογών του Office, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο στη Γνωσιακή βάση της Microsoft: