Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podsumowanie
W tym artykule krok po kroku opisano sposób obsługi zdarzeń programu Microsoft Office Excel 2003 i Microsoft Office Excel 2007 z klienta usługi Automation opracowywanego przy użyciu programu Visual Basic .NET.
Tworzenie programu obsługi zdarzeń
Program obsługi zdarzeń można utworzyć za pomocą programu Microsoft Visual Basic .NET 2003 lub Visual Basic .NET 2002 w jeden z następujących sposobów. Sposób tworzenia programu obsługi zdarzeń za pomocą platformy .NET w języku Visual Basic zależy od tego, jak chcesz skojarzyć procedurę obsługi zdarzeń ze zdarzeniami:
- Zazwyczaj program obsługi zdarzeń jest tworzone przy użyciu słowa kluczowego Handles ze słowem kluczowym WithEvents. W przypadku deklarowania zmiennej przy użyciu słowa kluczowego WithEvents program Visual Basic .NET automatycznie łączy się ze zdarzeniami tego obiektu w czasie wykonywania. Aby obsłużyć określone zdarzenie dla tego obiektu, dodaj odpowiedni program obsługi przy użyciu listy Klasy i listy Metody środowiska .NET programu Visual Studio, gdy jesteś w widoku kodu.
- Za pomocą słowa kluczowego AddHandler platforma .NET w języku Visual Basic zapewnia drugi sposób obsługi zdarzeń. Słowo kluczowe AddHandler i słowo kluczowe RemoveHandler umożliwiają dynamiczne uruchamianie i zatrzymywanie obsługi zdarzeń dla określonego zdarzenia.
Tworzenie klienta programu .NET Automation w języku Visual Basic
W poniższych krokach pokazano, jak używać obu sposobów obsługi zdarzeń programu Excel z poziomu klienta usługi Automation opracowanego przy użyciu platformy .NET w języku Visual Basic:
Uruchom program Visual Studio .NET 2002 lub Visual Studio .NET 2003. W menu Plik kliknij pozycję Nowy, a następnie kliknij pozycję Projekt. W obszarze Projekty Visual Basic wybierz pozycję Aplikacja systemu Windows.
Domyślnie tworzony jest formularz Form1.
Dodaj odwołanie do biblioteki obiektów programu Microsoft Excel. Aby to zrobić, wykonaj następujące kroki.
- W menu Projekt kliknij pozycję Dodaj odwołanie.
- Na karcie COM znajdź bibliotekę obiektów programu Microsoft Excel 11.0, a następnie kliknij pozycję Wybierz.
- Kliknij przycisk OK w oknie dialogowym Dodawanie odwołań , aby zaakceptować wybrane opcje. Jeśli zostanie wyświetlony monit o wygenerowanie otok dla wybranych bibliotek, kliknij przycisk Tak.
W menu Project (Projekt ) wybierz pozycję Dodaj moduł. Na liście szablonów wybierz pozycję Moduł, a następnie kliknij pozycję Otwórz. Wklej następujący kod w nowym module:
'================================================================== '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
Dodaj kolejny moduł do projektu, a następnie wklej następujący kod w module:
'================================================================== '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
Dodaj następujące elementy na początku modułów Module1.vb i Module2.vb:
Imports Microsoft.Office.Interop
Uwaga Dokładna nazwa przestrzeni nazw pakietu Office może się różnić w zależności od wersji podstawowego zestawu międzyoperacyjnego (PIA) pakietu Office zarejestrowanego w globalnej pamięci podręcznej zestawów (GAC) po dodaniu odwołania do rozwiązania. Jeśli zostanie wyświetlony komunikat o błędzie kompilacji w tej instrukcji, sprawdź nazwę wyświetlaną w Eksplorator rozwiązań (w obszarze Odwołania), a następnie zmień nazwę odpowiednio.
W Eksplorator rozwiązań kliknij dwukrotnie plik Form1.vb, aby wyświetlić formularz w widoku projektu.
W menu Widok wybierz pozycję Przybornik , aby wyświetlić przybornik, a następnie dodaj dwa przyciski do formularza Form1. Zmień właściwość Text przycisku Button1, wpisując polecenie Użyj funkcji WithEvents. Następnie zmień właściwość Text przycisku Button2, wpisując polecenie Użyj delegatów.
W menu Widok wybierz pozycję Kod , aby wyświetlić okno Kod formularza. Dodaj następujący kod do procedur obsługi zdarzeń Click dla przycisków:
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
Testowanie kodu
Naciśnij klawisze CTRL+ALT+O, aby wyświetlić okno Dane wyjściowe.
Naciśnij klawisz F5, aby skompilować i uruchomić program.
W formularzu kliknij pozycję Użyj funkcji WithEvents.
Program uruchamia program Excel, a następnie tworzy skoroszyt z trzema arkuszami.
Dodaj dowolne dane do komórek w co najmniej jednym arkuszu. Naciśnij klawisz ENTER po każdej zmianie. Sprawdź okno Dane wyjściowe w programie Visual Studio .NET, aby sprawdzić, czy są wywoływane programy obsługi zdarzeń.
Zamknij program Excel.
W formularzu kliknij pozycję Użyj delegatów.
Ponownie program uruchamia program Excel, a następnie tworzy skoroszyt z wieloma arkuszami.
Dodaj dowolne dane do komórek w co najmniej jednym arkuszu. Naciśnij klawisz ENTER po każdej zmianie. Sprawdź okno Dane wyjściowe w programie Visual Studio .NET, aby sprawdzić, czy są wywoływane programy obsługi zdarzeń.
Zamknij program Excel, a następnie zamknij formularz, aby zakończyć sesję debugowania.
Rozwiązywanie problemów
Podczas testowania kodu może zostać wyświetlony następujący komunikat o błędzie:
W interop.excel.dllwystąpił nieobsługiwany wyjątek typu "System.InvalidCastException"
Dodatkowe informacje: Taki interfejs nie jest obsługiwany
Informacje
Aby uzyskać dodatkowe informacje na temat programowania pakietu Microsoft Office w programie Visual Studio .NET, odwiedź następującą witrynę sieci Web Microsoft Developer Network (MSDN):
Programowanie pakietu Microsoft Office przy użyciu programu Visual Studio
Aby uzyskać dodatkowe informacje na temat automatyzowania programu Excel z programu Visual Basic .NET, kliknij następujący numer artykułu, aby wyświetlić artykuł w bazie wiedzy Microsoft Knowledge Base:
302094 HOWTO: automatyzowanie programu Excel z platformy .NET w języku Visual Basic w celu wypełnienia lub uzyskania danych w zakresie przy użyciu tablic