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.
È 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:
222101
(http://support.microsoft.com/kb/222101/
)
How 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:
- 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.
- 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 - Avviare Visual Basic e creare un progetto EXE ActiveX. Per impostazione predefinita viene creato Class1.
- Fare clic per selezionare Proprietà dal menu progetto e quindi modificare il nome del progetto per MyTimer .
- 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
- Dal menu progetto scegliere Aggiungi Form per aggiungere un nuovo form al progetto.
- Aggiungere al form un controllo Timer .
- 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
- Salvare il progetto in una nuova sottocartella denominata server .
- Scegliere Crea MyTimer.Exe per creare e registrare il componente dal menu file .
creare il client di automazione - Creare un nuovo progetto EXE standard in Visual Basic. In base all'impostazione predefinita, viene creato il progetto Form1.
- Aggiungere un controllo CommandButton al form.
- Scegliere riferimenti dal menu progetto . Aggiungere riferimenti alla Libreria oggetti di Microsoft Word 8.0 (o 9.0 o 10.0) e MyTimer .
- 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
- Salvare il progetto in una nuova sottocartella denominata client .
- Premere F5 per eseguire il progetto. verrà visualizzato Form1 .
- 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.
- Nel Pannello di controllo di Windows, modificare la stampante predefinita è configurato per la stampa sulla porta FILE.
- 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
(https://partner.microsoft.com/global/30000104)
Microsoft Advisory Services -
http://support.microsoft.com/gp/advisoryservice
(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
(http://support.microsoft.com/default.aspx?scid=fh;en-us;cntactms)
Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
257757
(http://support.microsoft.com/kb/257757/
)
INFORMAZIONI: Considerazioni per l'automazione di lato server di Office
226118
(http://support.microsoft.com/kb/226118/
)
OFF2000: Programmazione risorse per Visual Basic, Applications Edition
253235
(http://support.microsoft.com/kb/253235/
)
FILE: 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:
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
| kbmt kbautomation kbhowto kbprogramming KB259971 KbMtit |
Traduzione automatica articoliIl 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
(http://support.microsoft.com/kb/259971/en-us/
)
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.