В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету
Войти

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

822750
Аннотация
В данной статье описывается, как обрабатывать события 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 ключевое слово, разрешают можно запускать и останавливать обработку события определенного события динамически.
Перейти к началу страницы

Следующие шаги демонстрируют, как использовать в любом случае для обработки событий 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):Для получения дополнительных сведений об автоматизации Excel из Visual Basic.NET, щелкните следующие номера статей базы знаний Майкрософт:
301982Методические УКАЗАНИЯ: Автоматизации приложения Microsoft Excel из Visual Basic.NET
302094 Методические УКАЗАНИЯ: Автоматизация Excel с помощью Visual Basic.NET для заполнения или для получения данных в диапазоне с помощью массивов
Перейти к началу страницы
XL2007

Предупреждение: эта статья переведена автоматически

Свойства

Номер статьи: 822750 — последний просмотр: 06/15/2011 14:21:00 — редакция: 4.0

  • Microsoft Office Excel 2007
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbhowto kbmt KB822750 KbMtru
Отзывы и предложения