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

Il supporto per Office 2003 è terminato

Il supporto Microsoft per Office 2003 è terminato l'8 aprile 2014. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

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
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
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 ExplicitPublic Event Timer()Private oForm1 As Form1Private Sub Class_Initialize()    Set oForm1 = New Form1    oForm1.Timer1.Enabled = FalseEnd SubPrivate Sub Class_Terminate()    Me.Enabled = False    Unload oForm1    Set oForm1 = NothingEnd SubPublic Property Get Enabled() As Boolean    Enabled = oForm1.Timer1.EnabledEnd PropertyPublic 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 IfEnd PropertyPublic Property Get Interval() As Integer    Interval = oForm1.Timer1.IntervalEnd PropertyPublic Property Let Interval(ByVal vNewValue As Integer)    oForm1.Timer1.Interval = vNewValueEnd PropertyFriend Sub TimerEvent()    RaiseEvent TimerEnd 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 ExplicitPublic oClass1 As Class1Private Sub Timer1_Timer()    oClass1.TimerEventEnd 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 ExplicitPrivate oWord As Word.ApplicationPrivate strWordCaption As StringPrivate WithEvents oMyTimer As MyTimer.Class1Private Sub Form_Load()    'Create MyTimer object, and then disable it by default:    Set oMyTimer = New MyTimer.Class1    oMyTimer.Enabled = FalseEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    'Terminate MyTimer object when the form is closed:    oMyTimer.Enabled = False    Set oMyTimer = NothingEnd SubPrivate 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:=FalseDone:    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 SubErrorHandler:    Resume DoneEnd SubPrivate 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 = FalseEnd SubPrivate 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 = sEnd 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:

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 259971 - Ultima revisione: 12/05/2015 19:46:58 - Revisione: 6.7

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

  • kbnosurvey kbarchive kbmt kbautomation kbhowto kbprogramming KB259971 KbMtit
Feedback