Jak zrušit dialogové okno zobrazené aplikací systému Office pomocí jazyka Visual Basic

Souhrn

Při automatizaci aplikace sady Office z aplikace Visual Basic (VB), aplikace Office se může zobrazit dialogové okno. Dialogové okno způsobuje, že aplikace Visual Basic se zdánlivě přestat reagovat (nebo zablokuje se), protože jazyka Visual Basic čeká dialogové okno Chcete-li zrušit. Před pokračováním v aplikaci Visual Basic musí zrušit dialogové okno.

Tento článek popisuje, jak předejít dialogových oken během automatizace pomocí objektových modelů aplikace Office. Obsahuje také podrobný příklad toho, jak simulovat vstup uživatele programově zavřete dialogové okno, které nelze vyhnout při použití obvyklé vlastnosti a metody vystavené v modelech objektu.

Další informace

V některých případech chcete automatizovat aplikace systému Office, ale nevyžaduje žádné interakce uživatele s aplikací sady Office. V tomto případě je-li aplikace sady Office se zobrazí dialogové okno, aplikace se zobrazí přestane reagovat, dokud uživatel může zrušit dialogové okno. Však nemusí být uživatel ke spouštění počítače, který lze zavřít dialogové okno.

Aplikace sady Office nejsou určeny pro bezobslužné spouštění. Aplikace, který automatizuje Office tedy může někdy dojít dialogové okno zobrazené aplikací Office. Z normálního testování aplikace, můžete obvykle určit, které dialogové okno dojít políček a zapisovat kód předejít tyto konkrétní dialogových.

Některé doporučené postupy pro předcházení dialogových oken při automatizaci aplikace sady Office jsou následující:
  • Zjistěte, zda vlastnost nebo metoda (ten, který je příčinou dialogové okno) jsou pomocí volitelné argumenty, které lze předat ji. V některých případech předáním všech argumentů na vlastnost nebo metodu můžete vyhnout dialogové okno. Pokud používáte metodu Otevřít otevřete sešit aplikace Excel a v sešitu je například chráněné heslem, zobrazí aplikace Excel dialogové okno s výzvou k zadání hesla, pokud nezadáte heslo argument při volání metody Otevřít . Aby se zabránilo dialogové okno, zadejte hodnotu pro heslo argument při volání metody Open . Podobně při použití metody Zavřít zavřete dokument, je často užitečné zadat argument SaveChanges , aby se zabránilo dialogové okno s výzvou k uložení změn. Další informace o tom, jak zjistit, jaké argumenty jsou k dispozici pro vlastnost nebo metodu volání, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    Jak chcete vyhledat a použít dokumentaci modelu objektu Office 222101

  • Zkoumat objektový model aplikace systému Office, chcete-li zobrazit, pokud může být vlastnost, která brání některá dialogová okna. Například aplikace Excel Application objekt má vlastnosti AskToUpdateLinks a AlertBeforeOverwriting .
  • Nastavte vlastnost Application.DisplayAlerts (projekt, Excel, Word) nebo pomocí Application.DoCmd.SetWarnings False (přístup pouze) vypnout zobrazování oznámení. Pomocí tohoto nastavení lze předejít většinu, ale ne všechna dialogová okna.
  • Nastavte vlastnost Application.FeatureInstall (Office 2000 a novější) pro zpracování možné "Tato funkce není instalována..." dialogová okna při přístupu k komponentu, která pravděpodobně není nainstalována v systému uživatele.
  • Použití příkazu On Error , aby se zabránilo runtime chybové zprávy, které by mohlo dojít, například při zpracování došlo k pokusu o nastavení Application.ActivePrinter , pokud žádný ovladač tiskárny nainstalovaný v systému uživatele.
  • Otestujte aplikaci důkladně umožňující odhadnout, kdy dojde v dialogových oknech. Předpokládejme například, že volání metody SaveAs aplikace sady Office uložit do souboru. Pokud tento soubor již existuje, může zobrazit dialogové okno s požadavkem potvrzení, chcete-li nahradit existující soubor. Je-li upravit kód pro kontrolu souborů před volací
    Metoda SaveAs možnost dialogovém okně zobrazení se můžete vyhnout. Například pokud soubor již existuje, odstraňte jej pomocí příkazu Kill před voláním metody SaveAs .
Poznámka: I když používají tyto techniky a pečlivě navrhovat aplikace chcete-li zabránit dialogových oken, je může stále být natřené situace, kde nelze vyhnout dialogové okno pomocí metody a vlastnosti, které jsou vystaveny v objektový model aplikace systému Office. V takových situacích může být nutné programově zavřete dialogové okno pomocí simulace vstup uživatele. Následující ukázka znázorňuje, jak toho lze dosáhnout pomocí klienta automatizace jazyka Visual Basic.

Ukázka

Kroky v této části demonstrují automatizaci aplikace Microsoft Word k tisku dokumentu. Automatizace klienta volá metodu tisku pro objekt aplikace Word dokument . Pokud uživatele výchozí tiskárny nastaven tisk na portu FILE, volání výtisk vyvolá dialogové okno s výzvou k zadání názvu souboru. Chcete-li zjistit, pokud výtisk metoda způsobí, že dialogové okno zobrazit, klienta automatizace jazyka Visual Basic používá ovládací prvek Timer rozpoznání nečinnosti po dokončení volání metody výtisk . Před voláním výtisk, časovač je povolena a nastavit v pěti sekund. Po dokončení tisku časovače je zakázána. Proto pokud se výtisk metoda dokončí během pěti sekund, nikdy dojde k události Timer a neproběhne žádná další akce. Dokument je vytištěn a pokračuje v provádění kódu za výtisk metoda. Však pokud pět druhého intervalu dojde k události Timer , předpokládá se, že výtisk metoda nebyla dokončena a zpoždění je způsobeno dialogové okno čekání na vstup uživatele. Při výskytu události časovače , klienta automatizace vybrán do aplikace Word a zavřete dialogové okno pomocí PředatKlávesovéÚhozy .

Poznámka: Pro demonstrační účely v tomto příkladu metoda vytisknout tak, že zobrazuje dialogové okno záměrně při tisku do sady tiskárny na portu FILE. Všimněte si, že výtisk metoda má dva argumenty, Název_výstupního_souboru a PrintToFile, poskytující nechcete-li toto dialogové okno.

Navíc při použití tohoto přístupu "timer", je můžete upravit dobu čekání na větší nebo menší než pět sekund, jakož i úhozy odeslat do dialogového okna přizpůsobit.

Tato ukázka se skládá ze dvou projektů jazyka Visual Basic:
  1. ActiveX EXE, který obsahuje Timer třídy slouží k detekci zpoždění. Důvod pro použití ActiveX EXE pro třídu Timer je v samostatném procesu a tedy samostatný podproces spuštění kódu časovače. To umožňuje třídy Timer pro vyvolání události při pozastavené automatizace volání.
  2. Standardní EXE, který používá automatizace do aplikace Word a volá metodu tisku k tisku dokumentu. Chcete-li zjistit zpoždění při volání metody tisku používá ActiveX EXE.
Vytvoření projektu ActiveX EXE.
  1. Spusťte aplikaci Visual Basic a vytvoření projektu ActiveX EXE. Ve výchozím nastavení je vytvořen Class1.
  2. V nabídce projekt klepněte na příkaz Vlastnostia potom změňte název projektu na MyTimer.
  3. Zkopírujte a vložte následující kód do modulu 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. V nabídce projekt vyberte Přidat formulář do projektu přidat nový formulář.
  5. Přidání ovládacího prvku časovače do formuláře.
  6. Zkopírujte a vložte následující kód do modulu kódu pro Form1:
    Option Explicit
    Public oClass1 As Class1

    Private Sub Timer1_Timer()
    oClass1.TimerEvent
    End Sub

  7. Uloží tento projekt v podsložku s názvem serveru.
  8. V nabídce soubor vyberte Vytvořit MyTimer.Exe vytvořit a zaregistrovat komponenty.
Vytvoření klienta automatizace
  1. Vytvoření nového projektu standardní EXE v jazyce Visual Basic. Ve výchozím nastavení je vytvořen formulář Form1.
  2. Do formuláře přidáte ovládací prvek CommandButton .
  3. V nabídce projekt vyberte odkazy. Přidáte odkazy Objektové knihovny Microsoft Word 8.0 (nebo 9.0 nebo 10.0)a MyTimer.
  4. Zkopírujte a vložte následující kód do modulu formuláře:
    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. Uloží tento projekt v podsložku s názvem klienta.
  6. Stisknutím klávesy F5 ke spuštění projektu. Zobrazí se Form1 .
  7. Klepněte na tlačítko Command1 ve formuláři. To automatizuje aplikace Word přidá nový dokument s nějaký text a potom odešle do tiskárny pomocí metody výtisk . Pokud tiskárna je konfigurována na tisk na tiskárně nezobrazí dialogové okno.
  8. V Ovládacích panelech systému Windows Změna výchozí tiskárny tak, aby je konfigurována na tisk na portu FILE.
  9. Klepněte na tlačítko Command1 a Všimněte si, že se zobrazí dialogové okno v aplikaci Word. Není zavřete dialogové okno; počkejte pět sekund a dojde k události Timer programově zamítnut dialogové okno. Výstupní soubor s názvem MyOutput.prn je vytvořen v podsložce klienta.
Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez jakékoli záruky výslovně uvedené nebo předpokládané, včetně, ale nikoli výhradně, mlčky předpokládaných záruk obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem je prokázána a nástroje používané k vytváření a ladění procedur. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo vytvářet procedury podle konkrétních potřeb.
Jestliže nejste zkušenými programátory, můžete kontaktovat Microsoft Certified Partner nebo poradenské služby společnosti Microsoft. Další informace naleznete v těchto webů společnosti Microsoft:

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

Služba Microsoft zpravodaje - http://support.microsoft.com/gp/advisoryservice

Další informace o možnostech podpory, které jsou k dispozici a o možnostech kontaktování společnosti Microsoft naleznete na následujícím webu společnosti Microsoft:http://support.microsoft.com/default.aspx?scid=fh; EN-US; CNTACTMS

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

257757 INFO: důležité informace pro automatizaci na straně serveru Office

226118 OFF2000: prostředky programování v jazyce Visual Basic for Applications

SOUBOR 253235 : Offautmn.exe Tento článek popisuje sadu Office 97 a 2000 automatizace a poskytuje vzorový kód

Další informace o automatizaci systému Office navštivte Centrum podpory rozvoje Office na následujícím webu společnosti Microsoft:
Vlastnosti

ID článku: 259971 - Poslední kontrola: 8. 1. 2017 - Revize: 1

Váš názor