Как выйти из диалогового окна отображаются приложением Office с помощью Visual Basic

Переводы статьи Переводы статьи
Код статьи: 259971 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

При автоматизации приложения Microsoft Office из Visual Basic (VB), приложения Office может отображаться в диалоговом окне. Диалоговое окно в результате приложения Visual Basic, перестают отвечать на запросы (или зависание) Поскольку VB ожидает диалоговым окном, можно удалить. Необходимо в диалоговом окне можно удалить для продолжения приложения Visual Basic.

Это в статье обсуждается использование объектной модели приложений Office Избегайте диалоговые окна во время автоматизации. Он также предоставляет пошаговый пример показано, как имитировать ввод данных пользователем, чтобы программно отключить диалоговое окно поле, нельзя избежать, используя обычные свойства и методы, предоставляемые в объектные модели.

Дополнительная информация

В некоторых случаях может потребоваться автоматизации приложений Office но не требует вмешательства пользователя с приложением Microsoft Office. В этом случае Если приложение Microsoft Office отображается диалоговое окно, приложение будет прекратить отвечать на запросы, пока пользователь может закрыть диалоговое окно. Однако иногда не быть прием пользователя на передней части компьютера, который можно закрыть диалоговое окно поле.

Приложения Office не предназначены для автоматического выполнения. Таким образом, приложение, которое позволяет автоматизировать Office может появиться диалоговое окно отображается в приложении Microsoft Office. Из обычного тестирования приложения, обычно определить какие диалогового окна поля возникают и записать ваши код, чтобы избежать их конкретной диалоговые окна поля.

Ниже приведены некоторые рекомендуемые стратегии Предотвращение вывода диалогового окна при автоматизации Office приложение:
  • Определите свойства или метода при использовании (один что вызывает диалоговое окно) имеет дополнительные аргументы, которые можно передать в него. В некоторых случаях передача всех аргументов для свойства или метода, позволяет избежать диалоговое окно. Например, если вы используете Открыть пароль — это метод, чтобы открыть эту книгу и книги Excel защищенный, Microsoft Excel отображает диалоговое окно, запрашивающее пользователя ввести пароль, если не указан аргумент пароля при вызове Открыть метод. Во избежание диалоговом окне укажите значение для Пароль Аргумент при вызове Открыть метод. Аналогично при использовании Закрыть метод, чтобы закрыть документ, часто полезно задать SaveChanges Аргумент во избежание диалоговое окно, запрашивающее пользователя сохранить изменения. Для получения дополнительных сведений о том, как определить, какие аргументы являются доступными для свойства или метода, который вы вызываете щелкните следующий номер статьи базы знаний Майкрософт:
    222101Как Поиск и использование документации по объектной модели Office
  • Изучите объектной модели приложения Microsoft Office ли Возможно, свойство, которое предотвращает некоторых диалоговых окон. Например Microsoft Excel Приложение у объекта AskToUpdateLinks и AlertBeforeOverwriting свойства.
  • Установка Application.DisplayAlerts свойство (Excel, проекта, Word) или использование Application.DoCmd.SetWarnings ЛОЖЬ (Только для доступа), чтобы отключить отображение предупреждений. Большинство, Однако не все диалоговые окна можно avoided помощью это идет.
  • Установка Application.FeatureInstall свойство (Office 2000 и более поздних) для обработки возможных "этой функции не установлен..."диалоговых при доступе к компонент, который может быть установленные на компьютере пользователя.
  • Использование При возникновении ошибки инструкцию, чтобы избежать сообщения об ошибке во время выполнения, может произойти, например При попытке установить Application.ActivePrinter При установке нет драйвера принтера на компьютере пользователя.
  • Протестируйте приложение тщательно позволяет предвидеть при диалоговые окна могут возникнуть. Предположим, например, при вызове Сохранить как метод для сохранения в файл приложения Office. Если файл, уже существует, появляется диалоговое окно, запрашивающее подтверждение замены существующий файл. Если изменить код, чтобы проверить наличие файла перед вызовом методаСохранить как метод, можно избежать возможных диалогового окна Появление. Например, если файл уже существует, удалите его с помощью Аннулирования Перед вызовом метода Сохранить как метод.
Примечание Даже при использовании этих методов и тщательно разработать свой приложение во избежание диалоговых окон, может, по-прежнему сталкивается с ситуацией где в диалоговом окне нельзя избежать с помощью методов и свойств, предоставляемых в объектной модели приложения Microsoft Office. В таких ситуациях может быть необходимые программно закрыть диалоговое окно, имитируя ввода данных пользователем. Следующие демонстрации показано, как это можно сделать с помощью Клиент автоматизации Visual Basic.

Образец

Действия, описанные в этом разделе демонстрируют автоматизации Microsoft Word для печати документа. Вызовы клиента автоматизации Распечатка метод со словом Документ объект. Если принтер по умолчанию пользователя настроена для печати порт ФАЙЛ, а затем вызов Распечатка Выводит диалоговое окно, запрашивающее у пользователя, введите имя файла. Для определить, Распечатка метод вызывает это диалоговое окно, в Visual Basic Использует клиент автоматизации Таймер элемент управления, чтобы определить время простоя, после вызова метода Распечатка метод. До вызова метода Распечатка, Таймер будет включен и задан для пожара в течение пяти секунд. Когда Распечатка завершения работы Таймер отключено. Таким образом Если Распечатка метод завершения в течение пяти секунд Таймер событие не происходит, и никакие дальнейшие действия не выполняются. Документ Печать и выполнение кода продолжается за пределами Распечатка метод. Тем не менее если Таймер событие происходит в рамках пяти второй интервал, предполагается, что очередь Распечатка метод не завершена, и причиной задержки является диалоговое окно поля ожидает ввода данных пользователем. При Таймер передает фокус в Microsoft Word происходит событие, клиент автоматизации и использует SendKeys Чтобы закрыть диалоговое окно.

Примечание В этом образце используются в демонстрационных целях, Распечатка метод таким образом, что он намеренно отображает диалоговое окно значение порта ФАЙЛ печати на принтере. Обратите внимание, что Распечатка метод имеет два аргумента: OutputfileName и Параметр PrintToFile, можно предоставить во избежание в этом диалоговом окне.

Кроме того при использовании этого подхода «таймер», можно настроить время ожидания быть больше или меньше, чем пять секунд, так и как настроить нажатий клавиш отправить в диалоговом окне.

Эта демонстрация состоит из двух Visual Основные проекты:
  1. ActiveX exe-ФАЙЛ, предоставляющий класс Timer используется для обнаружения задержка. Причина использовать ActiveX EXE для класса Timer является запуск таймера код в отдельном процессе и, следовательно, отдельный поток. Таким образом Возможно, для класса Timer для создания события во время приостановки автоматизации вызов.
  2. Стандартный exe-ФАЙЛ, использующий автоматизации Word и вызовы Распечатка способ печати документа. Исполняемые файлы ActiveX используется для обнаружения Задержка при вызове Распечатка метод.
Создание проекта ActiveX EXE
  1. Запустите Visual Basic и создать проект исполняемого файла ActiveX. По умолчанию будет создан класс Class1.
  2. На Проект меню, выберите Свойстваи затем изменить имя проекта для MyTimer.
  3. Скопируйте и вставьте следующий код в 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. На Проект меню, выберите Добавить форму Чтобы добавить новую форму проекта.
  5. Добавить Таймер элемент управления в форму.
  6. Скопируйте и вставьте следующий код в модуль кода для Форма Form1:
    Option Explicit
    
    Public oClass1 As Class1
    
    Private Sub Timer1_Timer()
        oClass1.TimerEvent
    End Sub
    					
  7. Сохранить проект в новую подпапку с именем Сервер.
  8. На Файл меню, выберите Сделать MyTimer.Exe Чтобы построить и зарегистрировать компонент.
Создание клиента автоматизации
  1. Создайте новый стандартный exe-проект в Visual Basic. — Form1 создается по умолчанию.
  2. Добавить CommandButton элемент управления в форму.
  3. На Проект Выберите пункт Ссылки. Добавление ссылок Библиотека объектов Microsoft Word 8.0 (или 9.0 или 10.0), а также MyTimer.
  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 для запуска проекта. Форма Form1 появится.
  7. Нажмите кнопку Command1 в этой форме. Это позволяет автоматизировать Microsoft Word, добавляет новый документ с некоторыми текст и отправляет на печать с помощью Распечатка метод. Если принтер настроен не отображается в диалоговом окне для печати на принтере.
  8. На панели управления Windows измените принтер по умолчанию Таким образом, чтобы он настроен на порт файла.
  9. Нажмите кнопку Command1 еще раз и обратите внимание, что появляется диалоговое окно в Microsoft Word. Не закрыть диалоговое окно; Подождите пять секунд и программно закрывается диалоговое окно При Таймер происходит событие. Выходной файл с именем MyOutput.prn создается в Подпапка клиента.
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и гарантии или подразумеваемых, включая, но не ограничиваясь ими, подразумеваемые гарантии товарности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с языком программирования рассчитаны и средства, используемые для создания и отладки. Специалисты службы технической поддержки Майкрософт могут пояснить конкретной процедуры, но они будут изменять примеры для реализации дополнительных возможностей или удовлетворения конкретных потребностей.
Имеют ограниченный опыт программирования, необходимо обратиться к сертифицированному партнеру корпорации Майкрософт или консультационной службы корпорации Майкрософт. Для получения дополнительных сведений посетите следующие веб-узлы корпорации Майкрософт:

Сертифицированных партнеров Майкрософт: https://partner.microsoft.com/rus/partner?countrycode=ru-ru

Служба Майкрософт- http://support.Microsoft.com/gp/advisoryservice

Для получения дополнительных сведений о вариантах поддержки, доступных и обратитесь в корпорацию Майкрософт посетите следующий веб-узел корпорации Майкрософт:http://support.Microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Ссылки

Для получения дополнительных сведений щелкните следующие номера статей базы знаний Майкрософт:
257757ИНФОРМАЦИЯ: Вопросы серверной автоматизации Office
226118 OFF2000: Ресурсы для разработчиков Visual Basic для приложений
253235 ФАЙЛ: Offautmn.exe обсуждение Office 97 и 2000 автоматизации и примеры кода
Для получения дополнительных сведений об автоматизации Office посетите Центр поддержки разработки Office на веб-узле корпорации Майкрософт:
http://support.Microsoft.com/ofd

Свойства

Код статьи: 259971 - Последний отзыв: 5 июня 2011 г. - Revision: 4.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 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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