Behandlung von Ereignissen für Excel mithilfe von Visual Basic .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 822750 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser schrittweise aufgebaute Artikel beschreibt die Microsoft Office Excel 2003 und Microsoft Office Excel 2007-Ereignisse Automatisierungsclient zu behandeln, die Sie mithilfe von Visual Basic .NET entwickeln.

Create an event handler

Sie können einen Ereignishandler mit Microsoft Visual Basic .NET 2003 oder Visual Basic .NET 2002 in einer der folgenden Methoden erstellen. Wie Sie einen Ereignishandler mit Visual Basic .NET erstellen wie Sie sollen, hängt Ereignisse den Ereignishandler zuordnen:
  • Sie erstellen i. d. r. einen Ereignishandler mit das Handles-Schlüsselwort mit dem WithEvents-Schlüsselwort. Wenn Sie mithilfe des WithEvents-Schlüsselworts eine Variable deklarieren, verbindet Visual Basic .NET automatisch auf die Ereignisse des Objekts zur Laufzeit. Um ein bestimmtes Ereignis für das Objekt zu behandeln, fügen Sie den relevanten Ereignishandler hinzu, indem Sie die Liste Klasse und der Liste Methode der Visual Studio .NET-Umgebung während Sie in der Codeansicht sind.
  • Mit dem Schlüsselwort AddHandler bietet Visual Basic .NET eine zweite Möglichkeit zum Behandeln von Ereignissen. Das AddHandler-Schlüsselwort und das RemoveHandler-Schlüsselwort lassen Sie starten und beenden Sie die Ereignisbehandlung für ein bestimmtes Ereignis dynamisch.

Create the Visual Basic .NET Automation client

Die folgenden Schritten wird zum Verwenden von entweder Möglichkeit, von einem Automatisierungsclient Excel-Ereignisse zu verarbeiten, die mithilfe von Visual Basic .NET entwickelt:
  1. Starten Sie Visual Studio .NET 2002 bzw. Visual Studio .NET 2003. Im Menü Datei klicken Sie auf neu und klicken Sie dann auf Projekt . Wählen Sie unter Visual Basic-Projekte die Windows-Anwendung .

    Standardmäßig wird jetzt Form1 erstellt.
  2. Fügen Sie einen Verweis auf die Microsoft Excel Object Library hinzu. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Menü Projekt auf Verweis hinzufügen .
    2. Suchen Sie auf der Registerkarte COM Microsoft Excel 11.0 Object Library , und klicken Sie dann auf auswählen .
    3. Klicken Sie auf OK im Dialogfeld Verweis hinzufügen , um Ihre Auswahl zu bestätigen. Wenn Sie eine Aufforderung zum Wrapper für die Bibliotheken generieren, die Sie ausgewählt haben erhalten, klicken Sie auf Ja .
  3. Wählen Sie im Projekt die Option Modul hinzufügen . Wählen Sie in der Liste der Vorlagen Modul aus und klicken Sie dann auf Öffnen . Fügen Sie folgenden Code in das neue Modul:
       '==================================================================
       '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. Das Projekt ein anderes Modul hinzu, und fügen Sie folgenden Code im Modul:
       '==================================================================
       '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. Fügen Sie die folgenden am Anfang der Module1.vb und Module2.vb:
    Imports Microsoft.Office.Interop
    Hinweis der genaue Name für den Office-Namespace in Abhängigkeit der Version von Office Primary Interop-Assembly (PIA) unterscheiden kann, die im globalen Assemblycache (GAC) registriert ist, wenn der Verweis zur Projektmappe hinzugefügt wird. Wenn Sie einen Build Fehlermeldung auf diese Anweisung erhalten, überprüfen Sie im Projektmappen-Explorer (unter References) angezeigt und ändern Sie den Namen entsprechend den Namen.
  6. Doppelklicken Sie im Projektmappen-Explorer auf Form1.vb um das Formular in der Entwurfsansicht anzuzeigen.
  7. Im Menü Ansicht wählen die Option Toolbox , um die Toolbox anzuzeigen und fügen Sie zwei Schaltflächen zu Form1 hinzu. Ändern Sie die Text -Eigenschaft des Button1 , indem Sie Mit WithEvents eingeben. Ändern Sie dann die Text -Eigenschaft der , indem Sie Mit Delegaten eingeben.
  8. Wählen Sie im Anzeigen die Option Code , um das Codefenster für das Formular anzuzeigen. Fügen Sie folgenden Code für die Click -Ereignishandler für die Schaltflächen:
    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

Test the code

  1. Drücken Sie [STRG]+[ALT]+[O], um das Ausgabefenster anzuzeigen.
  2. Drücken Sie F5, um erstellen und Ausführen des Programms.
  3. Klicken Sie auf das Formular auf Mit WithEvents .

    Das Programm startet Excel und erstellt eine Arbeitsmappe mit drei Arbeitsblättern.
  4. Zellen in einem oder mehreren Arbeitsblättern Daten hinzugefügt. Drücken Sie nach jeder Änderung die EINGABETASTE. Überprüfen Sie das Ausgabefenster in Visual Studio .NET, um überprüfen, ob die Ereignishandler aufgerufen werden.
  5. Beenden Sie Excel.
  6. Klicken Sie auf das Formular auf Delegaten verwenden .

    Erneut, das Programm startet Excel und erstellt dann eine Arbeitsmappe mit mehreren Arbeitsblättern.
  7. Zellen in einem oder mehreren Arbeitsblättern Daten hinzugefügt. Drücken Sie nach jeder Änderung die EINGABETASTE. Überprüfen Sie das Ausgabefenster in Visual Studio .NET, um überprüfen, ob die Ereignishandler aufgerufen werden.
  8. Beenden Sie Excel und schließen Sie das Formular, um die Debugsitzung zu beenden.

Troubleshooting

Wenn Sie den Code testen, erhalten Sie folgende Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.InvalidCastException' ist in interop.excel.dll aufgetreten

Weitere Informationen: Schnittstelle nicht unterstützt


Weitere Informationen über Maßnahmen, wenn Sie diese Fehlermeldung erhalten finden Sie die folgende KB-Artikelnummer:
316653PRB: Fehler verwenden WithEvents oder Delegaten zur Behandlung von Excel-Ereignisse von Visual Basic .NET oder Visual c# .NET

Informationsquellen

Weitere Informationen zu Microsoft Office-Entwicklung mit Visual Studio .NET den folgenden Microsoft Developer Network (MSDN)-Website:
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Weitere Informationen zu automatisieren von Excel aus Visual Basic .NET finden Sie folgende Artikel der Microsoft Knowledge Base:
301982So wird 's gemacht: Automatisieren Sie Microsoft Excel aus Visual Basic .NET
302094So wird 's gemacht: Automatisieren Sie Excel mit Visual Basic .NET um füllen oder Daten in einem Bereich zu erhalten, mithilfe von arrays

Eigenschaften

Artikel-ID: 822750 - Geändert am: Mittwoch, 17. Januar 2007 - Version: 4.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbmt kbhowto KB822750 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 822750
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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