Hallo Falko2!
Der Link funktioniert. Hier eine Kopie der Seite:
Artikel-ID: 316653 - Geändert am: Dienstag, 30. Januar 2007 - Version: 4.3
PRB: Fehler bei dem Verwenden von WithEvents oder Delegaten, um Excel-Ereignisse aus Visual Basic .NET oder visuelles C#-.NET zu behandeln
Hinweis: Dies ist ein maschinell übersetzter Artikel.
Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen
ProblembeschreibungWenn eine Anwendung versucht, Ereignisse aus Excel zu verarbeiten, indem eine An…Wenn eine Anwendung versucht, Ereignisse aus Excel zu verarbeiten, indem eine Anwendung WithEvents (in Visual Basic .NET) oder Stellvertretungen (in Visual Basic .NET oder Visual C#) verwendet, wird folgende Fehlermeldung möglicherweise Ihnen angezeigt:
Bei interop.excel.dll trat eine nicht behandelte Ausnahme des Typen „System.InvalidCastException“ auf
Weitere Informationen: solche keine Schnittstelle, die unterstützt wird
Zum Anfang
UrsacheDie Ereignis-Wrapper-Klassen in dem Interop-Assembly, das für Excel generiert wi…Die Ereignis-Wrapper-Klassen in dem Interop-Assembly, das für Excel generiert wird, haben Zugriffsberechtigungen, die zu strikt sind. Die universelle Laufzeit lässt einen Aufruf von IUnknown::QueryInterface der Wrapper-Klassen nicht zu und gibt E_NOINTERFACE zurück, da diese Wrapper-Klassen privat gekennzeichnet werden. Das übersetzt zu dem Ausnahmefehler, der in dem „Symptom“ Abschnitt beschrieben wird.
Zum Anfang
LösungUm dieses Problem umzugehen, können Sie das Interop-Assembly, das generiert wird…Um dieses Problem umzugehen, können Sie das Interop-Assembly, das generiert wird, Excel, um die Zugriffsrechte für die Ereignis-Wrapper-Klassen zu lockern, manuell ändern. Gehen Sie hierzu folgendermaßen vor
Speichern Sie und schließen Sie Ihr Projekt von Visual Studio .NET.
Öffnen Sie eine Eingabeaufforderung von Visual Studio .NET und ändern Sie das Verzeichnis in dem Ausgabenverzeichnis Ihres Projekts (beispielsweise \bin project name für ein \bin\release Visual Basic Projekt oder project name bei einem C#-Projekt).
Verwenden Sie ildasm.exe, um die Zwischen-Sprache aus dem Excel-Interop-Assembly wie folgt zu extrahieren:
ildasm.exe /source Interop.Excel.dll /output=Interop.Excel.il
Öffnen Sie Interop.Excel.il in einem Texteditor wie z. B. WordPad und Such nach Vorkommen des „_SinkHelper“. Ändern Sie die Zugriffsrechte der Klassen SinkHelper für Öffentlichkeit von privaten, speichern Sie dann und schließen Sie Interop.Excel.il.
An der Eingabeaufforderung von Visual Studio .NET verwenden Sie Ilasm.exe mit dem / wechselt DLL, die Sprache-zwischen-Datei erneut in einem Interop-Assembly wie folgt zu kompilieren:
ilasm.exe /dll Interop.Excel.il /output=Interop.Excel.dll
Öffnen Sie Ihr Projekt in Visual Studio .NET.
Fügen Sie einen Verweis auf dem Interop.Excel.dll, das in Schritt 5 erstellt wurde, hinzu. Gehen Sie hierzu folgendermaßen vor
IMPORTANT:: diese Schritte sind erforderlich. Wenn Sie einen Verweis auf dem neuen Interop-Assembly nicht erstellen, erstellt Visual Studio .NET das Interop-Assembly neu, wenn Sie das Projekt kompilieren oder wenn ein Setup-Paket erstellen.
Klicken Sie in der Liste der Projektverweise mit der rechten Maustaste in dem Projektmappen-Explorers von Visual Studio .NET auf Excel, und klicken Sie dann auf Entfernen.
Klicken Sie in dem Menü Projekt auf Verweis hinzufügen.
Klicken Sie in Ihnen auf Durchsuchen, in Ihnen die Interop.Excel.dll Datei in dem Ausgabenverzeichnis Projekts in ihres suchen, und klicken Sie dann in Ihnen auf Öffnen auf die Registerkarte in .NET.
Klicken Sie auf OK in dem Dialogfeld Verweise hinzufügen, um ihr Ihre Auswahl zu bestätigen.
Testen Sie das Programm erneut mit dem geänderten Interop-Assemblys. Gehen Sie hierzu folgendermaßen vor
Drücken Sie F5, um neu zu erstellen, und das Programm auszuführen.
Klicken Sie auf Button1, um Excel zu starten, wenn Form1 angezeigt wird.
Starten Sie eine neue Arbeitsmappe, und geben Sie dann Daten in beliebiger Zelle ein.
Klicken Sie in dem Menü Ansicht in Visual Studio .NET auf Andere Fenster, und klicken Sie dann auf Ausgabe. Der „Change Event Triggered“ Text in dem Ausgabenfenster bestätigt, dass Ihr Programm das Ereignis behandelte.
Zum Anfang
Weitere InformationenSchritte zu Reproduzieren des Problems Starten Sie Visual Studio .NET Klicken Si…Schritte zu Reproduzieren des Problems
Starten Sie Visual Studio .NET
Klicken Sie in dem Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Klicken Sie unter Visual Basic-Projekte auf Windows-Anwendung, und klicken Sie dann auf OK. Standardmäßig wird jetzt Form1 erstellt
Fügen Sie einen Verweis auf der Microsoft Excel-Objektbibliothek hinzu. Gehen Sie hierzu folgendermaßen vor
Klicken Sie in dem Menü Projekt auf Verweis hinzufügen.
Suchen Sie auf der Registerkarte COM Microsoft Excel Object Library, und klicken Sie dann auf Auswahl.
Hinweis: The Excel Objektbibliothek enthält eine Versionsnummer. Die Version für Excel 2000 ist 9.0; die Version für Excel 2002 ist 10.0.
Klicken Sie auf OK in dem Dialogfeld Verweise hinzufügen, um Ihre Ihre Auswahl zu bestätigen. Klicken Sie auf Ja, wenn Sie gefragt werden, dass für Bibliotheken Wrapper erstellt werden soll, die Sie auswählten.
Fügen Sie Form1 ein Befehlsschaltfläche hinzu.
Doppelklicken Sie auf Button1, um Bearbeitung des Ereignishandlers Click.
Ersetzen Sie den folgenden Cod
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
with:
Dim WithEvents oXL As Excel.Application
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
oXL = New Excel.Application()
oXL.Visible = True
oXL.UserControl = True
End Sub
Private Sub oXL_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) Handles oXL.SheetChange
Debug.WriteLine(„Change Event Triggered“)
End Sub
Drücken Sie, um F5 zu erstellt werden, und das Programm auszuführen.
Klicken Sie auf Button1, nachdem Form1 geladen wird. Beachten Sie, dass die Fehlermeldung in der folgenden Zeile Ihnen angezeigt wird:
oXL = New Excel.Application()
Zum Anfang
InformationsquellenKlicken Sie auf die folgenden Artikelanzahlen, um weitere Informationen über die…Klicken Sie auf die folgenden Artikelanzahlen, um weitere Informationen über die Behandlung von Ereignissen in Excel zu erhalten, um die Artikel der Microsoft Knowledge Base zu lesen:
302814 (http://support.microsoft.com/kb/302814/ ) Welcher VERFAHRENSWEISE: TO: Handeln-Ereignis Excel, indem Handeln-Ereignis Visual Basic .NET verwenden
302815 (http://support.microsoft.com/kb/302815/ ) Welcher VERFAHRENSWEISE: TO: Handeln-Ereignis für Microsoft Excel, indem Handeln-Ereignis für Microsoft Microsoft Visual Basic C# .NET verwenden
Gruß Ersin.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]