Как обрабатывать события для Excel с помощью Visual Basic.NET

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

В этой статье

Аннотация

В данной статье описывается, как обрабатывать события Microsoft Office Excel 2003 и Microsoft Office Excel 2007 из клиента автоматизации, разработать с помощью Visual Basic.NET.

Создание обработчика событий

Можно создать обработчик событий с помощью Microsoft Visual Basic.NET 2003 или с помощью Visual Basic.NET 2002 одним из следующих способов. Создание обработчика событий с помощью Visual Basic.NET, зависит от того, как вы хотите связать обработчик событий с событиями:
  • Как правило создайте обработчик событий, используя зарезервированное слово Handles с зарезервированным словом WithEvents. При объявлении переменной с помощью ключевого слова WithEvents, Visual Basic.NET автоматически подключается к событиям этого объекта во время выполнения. Для обработки указанного события для этого объекта, добавьте соответствующий обработчик с помощью списка класса и метода список Visual Studio.NET среды, находясь в представлении «Код».
  • С помощью зарезервированного слова AddHandler, Visual Basic.NET предоставляет второй способ обработки событий. Ключевое слово AddHandler и RemoveHandler ключевое слово, разрешают можно запускать и останавливать обработку события определенного события динамически.

Создайте в Visual Basic.Клиент автоматизации NET

Следующие шаги демонстрируют, как использовать в любом случае для обработки событий Excel из клиента автоматизации, разработанных с помощью Visual Basic.NET:
  1. Запустите Visual Studio.NET 2002 или Visual Studio.NET 2003. На Файл меню, нажмите кнопку Новый, а затем нажмите кнопку Проект. В группе Проекты Visual Basic, выберитеПриложение Windows.

    По умолчанию будет создана форма Form1.
  2. Добавьте ссылку на библиотеку объектов Microsoft Excel. Чтобы сделать это, выполните следующие действия.
    1. На Проект меню, нажмите кнопку Добавить ссылку.
    2. На COM Вкладка, найдите Библиотека объектов Microsoft Excel 11.0, а затем нажмите кнопку Выберите.
    3. Нажмите кнопку ОК В диалоговом окне Добавление ссылок диалоговое окно для подтверждения сделанного. Если появится запрос на создание оберток для выбранных библиотек, нажмите кнопку Да.
  3. На Проект Выберите пункт Добавить модуль. В списке Шаблоны выберитеМодуль, а затем нажмите кнопку Открыть. Вставьте новый модуль следующий код:
       '==================================================================
       'Demonstrates Using a Delegate for Event Handling
       '==================================================================
    
       Private xlApp As Excel.Application
       Private xlBook As Excel.Workbook
       Private xlSheet1 As Excel.Worksheet
       Private xlSheet2 As Excel.Worksheet
       Private xlSheet3 As Excel.Worksheet
       Private EventDel_BeforeBookClose As Excel.AppEvents_WorkbookBeforeCloseEventHandler
       Private EventDel_CellsChange As Excel.DocEvents_ChangeEventHandler
    
       Public Sub UseDelegate()
          'Start Excel and then create a new workbook.
          xlApp = CreateObject("Excel.Application")
          xlBook = xlApp.Workbooks.Add()
          xlBook.Windows(1).Caption = "Uses WithEvents"
    
          'Get references to the three worksheets.
          xlSheet1 = xlBook.Worksheets.Item(1)
          xlSheet2 = xlBook.Worksheets.Item(2)
          xlSheet3 = xlBook.Worksheets.Item(3)
          CType(xlSheet1, Excel._Worksheet).Activate()
    
          'Add an event handler for the WorkbookBeforeClose event of the
          'Application object.
          EventDel_BeforeBookClose = New Excel.AppEvents_WorkbookBeforeCloseEventHandler( _
                AddressOf BeforeBookClose)
          AddHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose
    
          'Add an event handler for the Change event of both Worksheet 
          'objects.
          EventDel_CellsChange = New Excel.DocEvents_ChangeEventHandler( _
                AddressOf CellsChange)
          AddHandler xlSheet1.Change, EventDel_CellsChange
          AddHandler xlSheet2.Change, EventDel_CellsChange
          AddHandler xlSheet3.Change, EventDel_CellsChange
    
          'Make Excel visible and give the user control.
          xlApp.Visible = True
          xlApp.UserControl = True
       End Sub
    
       Private Sub CellsChange(ByVal Target As Excel.Range)
          'This is called when a cell or cells on a worksheet are changed.
          Debug.WriteLine("Delegate: You Changed Cells " + Target.Address + " on " + _
                            Target.Worksheet.Name())
       End Sub
    
       Private Sub BeforeBookClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean)
          'This is called when you choose to close the workbook in Excel.
          'The event handlers are removed and then the workbook is closed 
          'without saving changes.
          Debug.WriteLine("Delegate: Closing the workbook and removing event handlers.")
          RemoveHandler xlSheet1.Change, EventDel_CellsChange
          RemoveHandler xlSheet2.Change, EventDel_CellsChange
          RemoveHandler xlSheet3.Change, EventDel_CellsChange
          RemoveHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose
          Wb.Saved = True 'Set the dirty flag to true so there is no prompt to save.
       End Sub
  4. Добавить другой модуль проекта, а затем вставьте следующий код в модуль:
       '==================================================================
       'Demonstrates Using WithEvents for Event Handling
       '==================================================================
    
       Private WithEvents xlApp As Excel.Application
       Private xlBook As Excel.Workbook
       Private WithEvents xlSheet1 As Excel.Worksheet
       Private WithEvents xlSheet2 As Excel.Worksheet
       Private WithEvents xlSheet3 As Excel.Worksheet
    
       Public Sub UseWithEvents()
          'Start Excel and then create a new workbook.
          xlApp = CreateObject("Excel.Application")
          xlBook = xlApp.Workbooks.Add()
          xlBook.Windows(1).Caption = "Uses WithEvents"
    
          'Get references to the three worksheets.
          xlSheet1 = xlBook.Worksheets.Item(1)
          xlSheet2 = xlBook.Worksheets.Item(2)
          xlSheet3 = xlBook.Worksheets.Item(3)
          CType(xlSheet1, Excel._Worksheet).Activate()
    
          'Make Excel visible and give the user control.
          xlApp.Visible = True
          xlApp.UserControl = True
       End Sub
    
       Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _
         ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose
          Debug.WriteLine("WithEvents: Closing the workbook.")
          Wb.Saved = True 'Set the dirty flag to true so there is no prompt to save
       End Sub
    
       Private Sub xlSheet1_Change(ByVal Target As Excel.Range) Handles xlSheet1.Change
          Debug.WriteLine("WithEvents: You Changed Cells " + Target.Address + " on Sheet1")
       End Sub
    
       Private Sub xlSheet2_Change(ByVal Target As Excel.Range) Handles xlSheet2.Change
          Debug.WriteLine("WithEvents: You Changed Cells " + Target.Address + " on Sheet2")
       End Sub
    
       Private Sub xlSheet3_Change(ByVal Target As Excel.Range) Handles xlSheet3.Change
          Debug.WriteLine("WithEvents: You Changed Cells " + Target.Address + " on Sheet3")
       End Sub
  5. Добавьте в начало Module1.vb и Module2.vb:
    Imports Microsoft.Office.Interop
    Примечание Точное имя для пространства имен Office могут отличаться в зависимости от версии из Office основной взаимодействия сборки (PIA), зарегистрированный в глобальном кэше сборок (GAC), при добавлении ссылки к решению. Если появляется сообщение об ошибке построения для данной инструкции, проверьте имя, как он отображается в обозревателе решений (в разделе ссылок), а затем измените соответствующие имена.
  6. В обозревателе решений дважды щелкните значок Form1.vb для отображения формы в режиме конструктора.
  7. На Представление Выберите пункт Панели инструментов для отображения панели инструментов, а затем добавьте в форму Form1 две кнопки. Изменение Текст свойства элемента Button1 путем ввода С помощью WithEvents. Затем измените Текст свойства элемента Button2 путем ввода Использование делегатов.
  8. На Представление Выберите пунктКод Отображает окно кода для формы. Добавьте следующий код для Нажмите кнопку обработчики событий для кнопок:
    Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click
            UseWithEvents()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button2.Click
            UseDelegate()
        End Sub

Проверка кода

  1. Нажмите сочетание клавиш CTRL + ALT + O, чтобы отобразить окно вывода.
  2. Нажмите клавишу F5 для построения и запуска программы.
  3. В форме нажмите кнопку С помощью WithEvents.

    Запущена программа Excel и затем создает книгу с тремя листами.
  4. Добавьте любые данные ячеек одного или нескольких листов. Нажмите клавишу ENTER после каждого изменения. Проверьте окно вывода в Visual Studio.NET, чтобы убедиться, что обработчики событий вызываются.
  5. Закройте Excel.
  6. В форме нажмите кнопку Использование делегатов.

    Опять же программа запускает Excel и затем создается книга с несколькими листами.
  7. Добавьте любые данные ячеек одного или нескольких листов. Нажмите клавишу ENTER после каждого изменения. Проверьте окно вывода в Visual Studio.NET, чтобы убедиться, что обработчики событий вызываются.
  8. Закройте Excel, а затем закройте форму, чтобы завершить сеанс отладки.

Устранение неполадок

При тестировании кода может появиться следующее сообщение об ошибке:

Произошло необработанное исключение типа «System.InvalidCastException» в interop.excel.dll

Дополнительные сведения: интерфейс не поддерживается


Для получения дополнительных сведений о том, что делать, если сообщение об ошибке обратитесь к следующей статье базы знаний Майкрософт:
316653PRB: Ошибки с помощью WithEvents или делегатов для обработки событий Excel из Visual Basic.NET или Visual C#.NET

Ссылки

Для получения дополнительных сведений о разработке Microsoft Office с помощью Visual Studio.NET, посетите следующий веб-узел Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/aa188489 (office.10) .aspx
Для получения дополнительных сведений об автоматизации Excel из Visual Basic.NET, щелкните следующие номера статей базы знаний Майкрософт:
301982Методические УКАЗАНИЯ: Автоматизации приложения Microsoft Excel из Visual Basic.NET
302094 Методические УКАЗАНИЯ: Автоматизация Excel с помощью Visual Basic.NET для заполнения или для получения данных в диапазоне с помощью массивов

Свойства

Код статьи: 822750 - Последний отзыв: 15 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office Excel 2007
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Ключевые слова: 
kbhowto kbmt KB822750 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:822750

Отправить отзыв

 

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