Τρόπος ματαίωση ένα παράθυρο διαλόγου που εμφανίζεται από μια εφαρμογή του Office με χρήση της Visual Basic

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 259971 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Όταν αυτοματοποιείτε μια εφαρμογή του Office από τη Visual Basic (VB), η εφαρμογή του Office ενδέχεται να εμφανίσει ένα παράθυρο διαλόγου. Το παράθυρο διαλόγου έχει ως αποτέλεσμα της εφαρμογής της Visual Basic ώστε να φαίνεται ότι σταματά να ανταποκρίνεται (ή "κολλάει"), επειδή VB είναι σε αναμονή για το παράθυρο διαλόγου για να ματαιώσει. Το παράθυρο διαλόγου πρέπει να ματαιώσει προκειμένου να συνεχιστεί η εφαρμογή της Visual Basic.

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

Περισσότερες πληροφορίες

Ορισμένες φορές, μπορεί να θέλετε να αυτοματοποιήσετε μια εφαρμογή του Office, αλλά δεν απαιτείται αλληλεπίδραση του χρήστη με την εφαρμογή του Office. Σε αυτήν την περίπτωση, εάν η εφαρμογή του Office εμφανίζει ένα παράθυρο διαλόγου, η εφαρμογή σας φαίνεται να μην ανταποκρίνεται μέχρι ο χρήστης να κλείσετε το παράθυρο διαλόγου. Ωστόσο, ενδέχεται να μην υπάρχει ένας χρήστης που έχετε μπροστά από τον υπολογιστή που μπορεί να κλείσετε το παράθυρο διαλόγου.

Εφαρμογές του Office δεν έχουν σχεδιαστεί για εκτέλεση χωρίς παρακολούθηση. Επομένως, μια εφαρμογή που αυτοματοποιεί το Office μερικές φορές μπορεί να αντιμετωπίσετε ένα παράθυρο διαλόγου που εμφανίζεται από την εφαρμογή του Office. Από το κανονικό έλεγχο της εφαρμογής, συνήθως μπορείτε να καθορίσετε ποια διαλόγου πλαίσια παρουσιάζονται και Συντάξτε τον κώδικά σας για να αποφύγετε αυτά τα παράθυρα διαλόγου του συγκεκριμένου πλαίσια.

Παρακάτω είναι μερικά προτείνεται στρατηγικές για την αποφυγή των παραθύρων διαλόγου κατά την αυτοματοποίηση του Office μια εφαρμογή:
  • Προσδιορίστε εάν έχει προαιρετικά ορίσματα που μπορείτε να περάσετε σε αυτή την ιδιότητα ή τη μέθοδο που χρησιμοποιείτε (αυτή που προκαλείται από το παράθυρο διαλόγου). Ορισμένες φορές, μεταβιβάζοντας όλα τα ορίσματα για την ιδιότητα ή μέθοδο, μπορείτε να αποφύγετε ένα παράθυρο διαλόγου. Για παράδειγμα, εάν χρησιμοποιείτε τοOpenmethod to open an Excel workbook and that workbook is password protected, Excel displays a dialog box asking the user to enter the password if you do not provide the password argument when calling theOpenΗ μέθοδος. To avoid the dialog box, provide a value for thePASSWORDargument when calling theOpenΗ μέθοδος. Similarly, when using theClose (Κλείσιμο)method to close a document, it often helps to specify theSaveChangesargument to avoid a dialog box asking the user to save changes.For additional information about how to determine what arguments are available for the property or the method that you are calling, click the following article number to view the article in the Microsoft Knowledge Base:
    222101How To Find and use Office object model documentation
  • Study the object model of the Office application to see if there may be a property that prevents certain dialog boxes. For example, the ExcelΕφαρμογήobject hasAskToUpdateLinksANDAlertBeforeOverwritingΙδιότητες (Properties).
  • Ορισμός τουApplication.DisplayAlertsproperty (Excel, Project, Word) or useApplication.DoCmd.SetWarnings False(Access only) to turn off the display of alert messages. Most, but not all, dialog boxes can be avoided using this setting.
  • Ορισμός τουApplication.FeatureInstallproperty (Office 2000 and later) to handle possible "This feature is not installed..." dialog boxes when accessing a component that may not be installed on the user's system.
  • Χρήση τουOn Errorstatement to avoid run-time error messages that could occur, such as when trying to set theApplication.ActivePrinterwhen no printer driver is installed on the user's system.
  • Test your application thoroughly to help anticipate when dialog boxes may occur. For example, suppose you call theSaveAsmethod of an Office application to save to a file. If that file already exists, a dialog box may appear asking confirmation to replace the existing file. If you modify your code to check for the file before calling theSaveAsmethod, you can avoid the possibility of the dialog box appearing. For example, if the file already exists, delete it using theKillstatement before calling theSaveAsΗ μέθοδος.
ΣΗΜΕΙΩΣΗEven if you use these techniques and carefully design your application to avoid dialog boxes, you may still be faced with a situation where a dialog box cannot be avoided with the methods and properties exposed in the Office application's object model. In such situations, it might be necessary to programmatically dismiss a dialog box by simulating user input. The following demonstration illustrates how this can be accomplished with a Visual Basic Automation client.

Sample

The steps in this section demonstrate Automation of Microsoft Word to print a document. The Automation client calls thePrintOutmethod for the WordΈγγραφοObject. If the user's default printer is configured to print to the FILE port, then a call toPrintOutproduces a dialog box prompting the user to enter a file name. To determine if thePrintOutmethod causes this dialog box to appear, the Visual Basic Automation client uses aTimercontrol to detect idle time after calling thePrintOutΗ μέθοδος. Prior to callingPrintOutΓια ναTimeris enabled and set to fire in five seconds. WhenPrintOutcompletes, theTimeris disabled. Therefore, if thePrintOutmethod completes within five seconds, theTimerevent never occurs and no further action is taken. The document is printed and the code execution continues beyond thePrintOutΗ μέθοδος. However, if theTimerevent occurs within the five second interval, it is assumed that thePrintOutmethod has not completed and that the delay is caused by a dialog box waiting for user input. Όταν τοTimerevent occurs, the Automation client gives focus to Word and usesSendKeysΓια να κλείσετε το παράθυρο διαλόγου.

ΣΗΜΕΙΩΣΗFor demonstration purposes, this sample uses thePrintOutmethod in such a way that it displays a dialog box intentionally when it prints to a printer set to a FILE port. Please note that thePrintOutmethod has two arguments,OutputfileNameANDPrintToFile, that you can provide to avoid this dialog box.

Additionally, when using this "timer" approach, you can customize the wait time to be greater or less than five seconds, as well as customize the keystrokes you send to the dialog box.

This demonstration consists of two Visual Basic projects:
  1. An ActiveX EXE that provides a Timer class used to detect a delay. The reason to use an ActiveX EXE for the Timer class is to run the Timer code in a separate process and, therefore, a separate thread. This makes it possible for the Timer class to raise an event during a suspended automation call.
  2. A Standard EXE that uses automation to Word and calls thePrintOutmethod to print a document. It uses the ActiveX EXE to detect a delay when calling thePrintOutΗ μέθοδος.
Create the ActiveX EXE Project
  1. Start Visual Basic and create an ActiveX EXE project. Class1 is created by default.
  2. Στο διακομιστήΤο έργομενού, κάντε κλικ για να επιλέξετεΙδιότητες (Properties), and then change the Project name toMyTimer.
  3. Copy and paste the following code into theClass1module:
    Option Explicit
    
    Public Event Timer()
    Private oForm1 As Form1
    
    Private Sub Class_Initialize()
        Set oForm1 = New Form1
        oForm1.Timer1.Enabled = False
    End Sub
    
    Private Sub Class_Terminate()
        Me.Enabled = False
        Unload oForm1
        Set oForm1 = Nothing
    End Sub
    
    Public Property Get Enabled() As Boolean
        Enabled = oForm1.Timer1.Enabled
    End Property
    
    Public Property Let Enabled(ByVal vNewValue As Boolean)
        oForm1.Timer1.Enabled = vNewValue
        If vNewValue = True Then
            Set oForm1.oClass1 = Me
        Else
            Set oForm1.oClass1 = Nothing
        End If
    End Property
    
    Public Property Get Interval() As Integer
        Interval = oForm1.Timer1.Interval
    End Property
    
    Public Property Let Interval(ByVal vNewValue As Integer)
        oForm1.Timer1.Interval = vNewValue
    End Property
    
    Friend Sub TimerEvent()
        RaiseEvent Timer
    End Sub
    					
  4. Στο διακομιστήΤο έργομενού, επιλογήAdd Formto add a new Form to the project.
  5. Προσθήκη ενόςTimercontrol to the form.
  6. Copy and paste the following code into the code module for Form1:
    Option Explicit
    
    Public oClass1 As Class1
    
    Private Sub Timer1_Timer()
        oClass1.TimerEvent
    End Sub
    					
  7. Save this project in a new subfolder namedSERVER.
  8. Στο διακομιστήFILEμενού, επιλογήMake MyTimer.Exeto build and register the component.
Create the Automation Client
  1. Δημιουργήστε ένα νέο έργο Standard EXE στη Visual Basic. Φόρμα1 δημιουργείται από προεπιλογή.
  2. Προσθήκη ενόςΣτοιχείο CommandButtoncontrol to the form.
  3. Στο διακομιστήΤο έργομενού επιλογήςΑναφορές. Add references to theMicrosoft Word 8.0 (or 9.0, or 10.0) Object Library, and toMyTimer.
  4. Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στη λειτουργική μονάδα φόρμας:
    Option Explicit
    
    Private oWord As Word.Application
    Private strWordCaption As String
    Private WithEvents oMyTimer As MyTimer.Class1
    
    Private Sub Form_Load()
        'Create MyTimer object, and then disable it by default:
        Set oMyTimer = New MyTimer.Class1
        oMyTimer.Enabled = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        'Terminate MyTimer object when the form is closed:
        oMyTimer.Enabled = False
        Set oMyTimer = Nothing
    End Sub
    
    Private Sub Command1_Click()
        On Error GoTo ErrorHandler
        
        'Create a new Word instance and put text in the new document:
        Set oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oWord.Documents.Add
        oWord.Selection.TypeText "Hello World!"
        
        'Prepare Timer to "watch out" for a delay in calling PrintOut:
        strWordCaption = GetWordCaption 'for use with AppActivate
        oMyTimer.Interval = 5000 'allow 5 second wait time
        oMyTimer.Enabled = True
            
        'Call the PrintOut method, which may prompt the user to select
        'an output file name if the default printer is set to FILE:
        oWord.PrintOut Background:=False
    
    Done:
        On Error Resume Next
        'Turn off Timer:
        oMyTimer.Enabled = False
        
        'Close document and quit the Word instance:
        oWord.ActiveDocument.Close SaveChanges:=False
        oWord.Quit
        Set oWord = Nothing
        Exit Sub
    ErrorHandler:
        Resume Done
    End Sub
    
    Private Sub oMyTimer_Timer()
    'If this event occurs, there was a delay in calling PrintOut.
    'You can assume that the delay is caused by a dialog box prompting
    'for an output file name because the user has the printer
    'configured to print to FILE. SendKeys is used to provide the
    'output file name and dismiss the dialog box.
        Dim strKeys As String
        
        On Error Resume Next
        
        'Make sure that Word has the focus before using SendKeys to it:
    
        AppActivate strWordCaption 'Set focus to Word.
        
        'Send keystrokes to enter the output file name:
        If Right$(App.Path, 1) = "\" Then
            strKeys = App.Path & "MyOutput.prn"
        Else
            strKeys = App.Path & "\MyOutput.prn"
        End If
        Kill strKeys 'make sure file does not already exist
        strKeys = strKeys & "~" '~ represents the OK button to dismiss dialog
        SendKeys strKeys, True
           
        'Disable MyTimer:
        oMyTimer.Enabled = False
    End Sub
    
    Private Function GetWordCaption() As String
    'Returns the Word Caption. For use with the AppActivate statement
        Dim s As String
        On Error Resume Next
        If Left$(oWord.Version, 1) = "8" Then
            'Word 97 logic:
            s = oWord.Caption
        Else
            'Word 2000 or 2002 logic:
            Err.Clear
            s = oWord.ActiveWindow.Caption
            If Err.Number = 0 Then 'no error
                s = s & " - " & oWord.Caption
            Else
                s = oWord.Caption
            End If
        End If
        GetWordCaption = s
    End Function
    					
  5. Αποθήκευση αυτού του έργου σε ένα νέο υποφάκελο με το όνομαΥπολογιστής-πελάτης.
  6. Πιέστε το πλήκτρο F5 για να εκτελέσετε το έργο.Φόρμα1εμφανίζεται.
  7. Κάντε κλικCommand1στη φόρμα. Αυτό αυτοματοποιεί το Word προσθέτει ένα νέο έγγραφο με κείμενο και μετά τη στέλνει στον εκτυπωτή, χρησιμοποιώντας τοΕκτύπωσηΗ μέθοδος. Δεν μπορείτε να δείτε ένα παράθυρο διαλόγου εάν ο εκτυπωτής σας έχει ρυθμιστεί για εκτύπωση σε έναν εκτυπωτή.
  8. Στον πίνακα ελέγχου των Windows, μπορείτε να αλλάξετε τον προεπιλεγμένο εκτυπωτή σας ώστε να έχει ρυθμιστεί για εκτύπωση στη θύρα FILE.
  9. Κάντε κλικCommand1και πάλι, και παρατηρήστε ότι εμφανίζεται ένα παράθυρο διαλόγου στο Word. Μην κλείσετε το παράθυρο διαλόγου, περιμένετε πέντε δευτερόλεπτα και το παράθυρο διαλόγου είναι μέσω προγραμματισμού όταν ματαιώσει τηΧρονόμετροσυμβάν. Δημιουργείται ένα αρχείο εξόδου που ονομάζεται MyOutput.prn στον υποφάκελο προγράμματος-πελάτη.
Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς να παρέχει καμία εγγύηση, είτε σιωπηρή είτε ρητή, περιλαμβανομένων, ενδεικτικά, των σιωπηρών εγγυήσεων εμπορευσιμότητας ή/και καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία και τον εντοπισμό σφαλμάτων διαδικασιών. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας, αλλά δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες, για να καλύψουν τις συγκεκριμένες ανάγκες σας.
Εάν δεν έχετε μεγάλη εμπειρία προγραμματισμού, ίσως χρειαστεί να επικοινωνήσετε με κάποιον πιστοποιημένο συνεργάτη της Microsoft (Microsoft Certified Partner) ή να χρησιμοποιήσετε τις συμβουλευτικές υπηρεσίες Microsoft Advisory Services. Για περισσότερες πληροφορίες, επισκεφθείτε αυτές τις τοποθεσίες της Microsoft στο Web:

Πιστοποιημένοι συνεργάτες της Microsoft -https://partner.microsoft.com/global/30000104

Συμβουλευτικές υπηρεσίες της Microsoft-http://support.Microsoft.com/GP/advisoryservice

Για περισσότερες πληροφορίες σχετικά με τις επιλογές υποστήριξης που είναι διαθέσιμες και τον τρόπο επικοινωνίας με τη Microsoft, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Αναφορές

Για περισσότερες πληροφορίες, κάντε κλικ στους αριθμούς των άρθρων παρακάτω για να προβάλετε τα άρθρα της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
257757ΠΛΗΡΟΦΟΡΙΕΣ: Θέματα για διακομιστή αυτοματισμού γραφείου
226118OFF2000: Προγραμματισμός πόρων για τη Visual Basic for Applications
253235ΑΡΧΕΙΟ: Offautmn.exe ασχολείται με το Office 97 και 2000 αυτοματισμού και παρέχει δείγμα κώδικα
Για πρόσθετες πληροφορίες σχετικά με την αυτοματοποίηση του Office, επισκεφθείτε το Κέντρο υποστήριξης της ανάπτυξης του Office στην ακόλουθη τοποθεσία της Microsoft στο Web:
http://support.Microsoft.com/ofd

Ιδιότητες

Αναγν. άρθρου: 259971 - Τελευταία αναθεώρηση: Κυριακή, 19 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Λέξεις-κλειδιά: 
kbautomation kbhowto kbprogramming kbmt KB259971 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:259971

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com