How to: Elimina una finestra di dialogo visualizzata da un'applicazione di Office con Visual Basic

Traduzione articoli Traduzione articoli
Identificativo articolo: 259971 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Quando si desidera automatizzare un'applicazione di Office da Visual Basic (VB), l'applicazione di Office potrebbe visualizzare una finestra di dialogo. La finestra di dialogo determina la smetta di rispondere (o si blocchi) perchÚ Visual Basic Ŕ in attesa la finestra di dialogo essere chiusa dell'applicazione Visual Basic. La finestra di dialogo deve essere chiuso prima di proseguire nell'applicazione Visual Basic.

Questo articolo viene descritto come utilizzare i modelli di oggetti per le applicazioni di Office al fine di evitare le finestre di dialogo durante l'automazione. Viene inoltre fornito un esempio passo passo di come simulare l'input utente per chiudere a livello di programmazione una finestra di dialogo che non pu˛ essere evitata utilizzando i normali proprietÓ e metodi esposti nei modelli di oggetti.

Informazioni

╚ possibile che si desideri automatizzare un'applicazione di Office evitando qualsiasi interazione con l'utente. In questo caso, se nell'applicazione di Office viene visualizzata una finestra di dialogo, l'applicazione rimarrÓ apparentemente bloccata fino a quando un utente non chiude la finestra di dialogo. Tuttavia, potrebbe non essere un utente seduto davanti al computer che Ŕ possibile chiudere la finestra di dialogo.

Le applicazioni di Office non sono state progettate per l'esecuzione automatica. Di conseguenza, un'applicazione che consente di automatizzare Office pu˛ talvolta verificarsi una finestra di dialogo visualizzata dall'applicazione di Office. Da normale test dell'applicazione, Ŕ possibile determinare in genere la finestra di dialogo caselle si verificano e scrivere il codice per evitare tali finestre particolare.

Riportato di seguito Ŕ consigliate alcune strategie per evitare di finestre di dialogo durante l'automazione di Office un applicazione:
  • Determinare se la proprietÓ o il metodo si utilizza (quello che causa la finestra di dialogo) dispone di argomenti facoltativi che Ŕ possibile passare a essa. A volte Ŕ possibile evitare la visualizzazione di una finestra di dialogo passando tutti gli argomenti alla proprietÓ o al metodo. Ad esempio, se si utilizza il metodo Open per aprire una cartella di lavoro di Excel e cartella di lavoro Ŕ protetto da password, verrÓ visualizzato una finestra di dialogo all'utente di immettere la password se non si specifica l'argomento della password quando si chiama il metodo Open di che richiede. Per evitare la finestra di dialogo, specificare un valore per l'argomento password quando si chiama il metodo Open . Analogamente, quando si utilizza il metodo Close per chiudere un documento, Ŕ spesso utile per specificare l'argomento SaveChanges per evitare una finestra di dialogo che richiede di salvare le modifiche apportate. Per ulteriori informazioni su come determinare quali argomenti sono disponibili per la proprietÓ o il metodo che si sta chiamando, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
    222101How to: Find e la documentazione di modello oggetto di Office
  • Esaminare il modello di oggetto dell'applicazione Office per verificare se pu˛ essere una proprietÓ che impedisce di alcune finestre di dialogo. Ad esempio, l'oggetto Excel Application dispone di proprietÓ AskToUpdateLinks e AlertBeforeOverwriting .
  • Impostare la proprietÓ Application.DisplayAlerts (Excel, Project, Word) oppure utilizzare Application.DoCmd.SetWarnings False (solo Access) per disattivare la visualizzazione dei messaggi di avviso. La maggior parte dei, ma non tutti, finestre di dialogo Ŕ possibile evitare l'uso di questa impostazione.
  • Impostare la proprietÓ di Application.FeatureInstall (Office 2000 e versioni successive) per gestire la possibile "questa funzionalitÓ non Ŕ installata..." finestra di dialogo finestre quando si accede a un componente che non essere installato nel sistema dell'utente.
  • Utilizzare l'istruzione On Error per evitare visualizzati messaggi di errore in fase di esecuzione che potrebbero verificarsi, ad esempio quando si tentando di impostare il Application.ActivePrinter quando nessun driver di stampante installato nel sistema dell'utente.
  • Eseguire esaurienti test dell'applicazione per prevedere quando potrebbero essere visualizzate le finestre di dialogo. Si supponga, ad esempio, che si chiama il metodo SaveAs di un'applicazione Office per salvare in un file. Se tale file esiste giÓ, una finestra di dialogo potrebbe essere visualizzata che chiede conferma per sostituire il file esistente. Se si modifica il codice per individuare il file prima di chiamare il metodo SaveAs , Ŕ possibile evitare la possibilitÓ della finestra di dialogo visualizzata. Ad esempio, se il file esiste giÓ, eliminarlo tramite l'istruzione kill prima di chiamare il metodo SaveAs .
Nota Anche se si utilizzano queste tecniche e si progetta accuratamente l'applicazione per evitare le finestre di dialogo, Ŕ ancora possibile che si verifichino situazioni in cui una finestra di dialogo non pu˛ essere evitata con i metodi e proprietÓ esposte nel modello a oggetti dell'applicazione Office. In tali situazioni, potrebbe essere necessario chiudere a livello di programmazione una finestra di dialogo simulando l'input dell'utente. Nella dimostrazione seguente viene illustrato come questa pu˛ essere effettuata con un client di automazione di Visual Basic.

Esempio

La procedura in questa sezione descrive automazione di Microsoft Word per stampare un documento. Il client di automazione chiama il metodo di Stampa per l'oggetto documento di Word. Se stampante predefinita dell'utente Ŕ configurata per la stampa sulla porta FILE, quindi una chiamata a Stampa produce una finestra di dialogo chiedere conferma all'utente per immettere un nome di file. Per determinare se il metodo PrintOut causa di questa visualizzazione della finestra di dialogo, il client di automazione di Visual Basic utilizza un controllo Timer per rilevare il tempo di inattivitÓ dopo la chiamata al metodo PrintOut . Prima di chiamare la Stampa , il Timer Ŕ attivato e impostato su attivato in cinque secondi. Quando viene completata la Stampa , il Timer viene disattivato. Pertanto, se il metodo di Stampa viene completata entro cinque secondi, non si verifica l'evento di Timer e non viene eseguita alcuna azione ulteriore. Il documento viene stampato e l'esecuzione del codice continua oltre il metodo PrintOut . Tuttavia, se l'evento Timer si verifica entro l'intervallo secondo cinque, si presuppone che il metodo PrintOut non Ŕ stata completata e che il ritardo sia causato da una finestra di dialogo in attesa di input dell'utente. Quando si verifica l'evento Timer , il client di automazione fornisce lo stato attivo a Word e utilizza di SendKeys per chiudere la finestra di dialogo.

Nota A scopo dimostrativo, questo esempio si utilizza il metodo di Stampa in modo che viene visualizzata una finestra di dialogo intenzionalmente stampato a un insieme della stampante sulla porta FILE. Si noti, che il metodo PrintOut due argomenti, OutputfileName e PrintToFile , che Ŕ possibile ottenere per evitare questa finestra di dialogo.

Inoltre, quando si utilizza questo approccio "timer", Ŕ possibile personalizzare il tempo di attesa su un valore superiore o inferiore a 5 secondi, nonchÚ personalizzare le sequenze di tasti che si invia a della finestra di dialogo.

In questa dimostrazione Ŕ costituito da due progetti di Visual Basic:
  1. Un file EXE ActiveX che fornisce una classe Timer utilizzata per rilevare un ritardo. Il motivo per utilizzare un file EXE ActiveX per la classe timer consiste nell'eseguire il timer di codice in un processo separato e, di conseguenza, un thread separato. Ci˛ rende possibile per la classe Timer generare un evento durante una chiamata di automazione in sospeso.
  2. EXE standard che utilizza l'automazione in Word e chiama il metodo di Stampa per stampare un documento. Viene utilizzato il file EXE ActiveX per rilevare un ritardo quando si chiama il metodo PrintOut .
creare il progetto EXE ActiveX
  1. Avviare Visual Basic e creare un progetto EXE ActiveX. Per impostazione predefinita viene creato Class1.
  2. Fare clic per selezionare ProprietÓ dal menu progetto e quindi modificare il nome del progetto per MyTimer .
  3. Copiare e incollare il codice riportato di seguito nel modulo di Class1 :
    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. Dal menu progetto scegliere Aggiungi Form per aggiungere un nuovo form al progetto.
  5. Aggiungere al form un controllo Timer .
  6. Copiare e incollare il codice riportato di seguito nel modulo di codice per Form1:
    Option Explicit
    
    Public oClass1 As Class1
    
    Private Sub Timer1_Timer()
        oClass1.TimerEvent
    End Sub
    					
  7. Salvare il progetto in una nuova sottocartella denominata server .
  8. Scegliere Crea MyTimer.Exe per creare e registrare il componente dal menu file .
creare il client di automazione
  1. Creare un nuovo progetto EXE standard in Visual Basic. In base all'impostazione predefinita, viene creato il progetto Form1.
  2. Aggiungere un controllo CommandButton al form.
  3. Scegliere riferimenti dal menu progetto . Aggiungere riferimenti alla Libreria oggetti di Microsoft Word 8.0 (o 9.0 o 10.0) e MyTimer .
  4. Copiare e incollare il codice seguente al modulo di maschera:
    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. Salvare il progetto in una nuova sottocartella denominata client .
  6. Premere F5 per eseguire il progetto. verrÓ visualizzato Form1 .
  7. Fare clic su Command1 nel modulo. Automatizza Word, aggiunge un nuovo documento con testo e quindi invia alla stampante utilizzando il metodo di Stampa . Se Ŕ configurata la stampa sulla stampante, non verrÓ visualizzata una finestra di dialogo.
  8. Nel Pannello di controllo di Windows, modificare la stampante predefinita Ŕ configurato per la stampa sulla porta FILE.
  9. Fare nuovamente clic su Command1 e osservare che in Word viene visualizzata una finestra di dialogo. Non chiudere la finestra di dialogo e attendere cinque secondi la finestra di dialogo a livello di programmazione viene chiuso quando si verifica l'evento Timer . Nella sottocartella client viene creato un file di output denominato MyOutput.prn.
Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilitÓ o idoneitÓ per uno scopo particolare. In questo articolo si presume che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli addetti al Supporto Microsoft possono spiegare la funzionalitÓ di una particolare procedura, ma non possono modificare questi esempi per fornire ulteriori funzionalitÓ o realizzare procedure per soddisfare esigenze specifiche.
Se si dispone di esperienza di programmazione limitata, Ŕ possibile che desideri contattare un Microsoft Certified Partner o servizi di consulenza Microsoft. Per ulteriori informazioni, visitare questi siti Web di Microsoft:

Microsoft Certified Partner - https://partner.microsoft.com/global/30000104

Microsoft Advisory Services - http://support.microsoft.com/gp/advisoryservice

Per ulteriori informazioni sulle opzioni di supporto disponibili e su come contattare Microsoft, visitare il seguente sito: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Riferimenti

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
257757INFORMAZIONI: Considerazioni per l'automazione di lato server di Office
226118OFF2000: Programmazione risorse per Visual Basic, Applications Edition
253235FILE: Offautmn.exe viene discusso Office 97 e 2000 automazione e fornito codice di esempio
Per ulteriori informazioni sull'automazione di Office, visitare la Office Development Support il seguente sito Web Microsoft:
http://support.microsoft.com/ofd

ProprietÓ

Identificativo articolo: 259971 - Ultima modifica: mercoledý 17 gennaio 2007 - Revisione: 6.7
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Office Excel 2003
  • 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 Office Word 2003
  • 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
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Chiavi:á
kbmt kbautomation kbhowto kbprogramming KB259971 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 259971
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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