PowerPoint zeigt einen Fehler mit der Angabe des Anwendungsfehlers an, wenn ein Excel -Diagramm -Objekt in ihn eingebettet ist

StackOverflow https://stackoverflow.com/questions/3003448

Frage

Dies ist ein sehr häufiges Problem, wenn Excel -Arbeitsblatt oder Diagramm in Wort oder PowerPoint eingebettet ist. Ich sehe dieses Problem sowohl in Wort als auch in PowerPoint und der Grund, warum es das COM -Addin ist, das an Excel angeschlossen ist. Das COM -Addin ist in C# (.NET) geschrieben. Siehe die angehängten Bilder für Fehlerdialoge.

Ich habe den Addin debuggen und ein sehr seltsames Verhalten gefunden. Die Onconnection (...), ONDISCONNECTION (...) usw. Methoden im COM -Addin funktionieren gut, bis ich dem Code einen Ereignishandler hinzufüge. dh das Arbeitsblatt_SheetChange, SelectionChange oder ein ähnliches Ereignis in Excel. Sobald ich auch einen einzelnen Ereignis -Handler hinzufüge (obwohl mein Code mehrere hat), beschweren sich Word und Powerpoint und aktivieren das eingebettete Objekt nicht.

In einigen Beiträgen im Internet wurden die Leute gebeten, die Antiviren-Addins für das Amt zu entfernen (in meinem Fall keine) das Objekt.

Hat jemand eine Vorstellung davon, was hier passiert?PowerPoint Error

Word Error

Aktualisiert 21-Juni-2010


Fand heraus, dass sowohl Ereignisse als auch Änderungen der Comaddins -Sammlung Probleme verursachen, wenn das eingebettete Objekt aktiviert wird. Ich habe jetzt die EXCEL :: Application :: UserControl -Eigenschaft verwendet, um zu überprüfen, ob sich Excel in einem eingebetteten Zustand befindet, und dann eine Onconnection (...) und Ondisconnection (...) Code überspringen.

Eine Lösung für das Problem mit Ereignissen kann darin bestehen, alle Ereignisse der Anwendungsebene in VBA -Code zu verschieben und in .NET aufzurufen. Dadurch werden alle Ereignishandler aus .NET -Code entfernt.

Es kann noch mehr Szenarien geben, in denen ein eingebettetes Objekt möglicherweise nicht initialisiert wird. Deshalb deaktiviere ich den COM -Addin, dh den Code in Onconnection (...) und Ondisconnection (...) insgesamt überspringen.

War es hilfreich?

Lösung

Hier ist, was ich getan habe, um dieses nervige Problem loszuwerden:

  1. Entfernen Sie alle Ereignishandler im .NET -Code und verlassen Sie sich auf die VBA -Anwendungsereignisse, dh anstatt Excel :: Application :: Worksheet_Activate (...) zu verarbeiten, behandeln Sie sie in einem VBA -Modul und rufen Sie das Addin an, wenn ein Ereignis empfangen wird . Die .NET -Event -Handler scheinen den Staat irgendwie zu korrumpieren.

  2. Deaktivieren Sie jeden Code, der mit dem Addin in Onconnection (...) mit dem Flag im benutzerdefinierten Param interagiert. Weitere Informationen zur Flagge finden Sie im folgenden Link:Com addins im Detail

Ich habe über die Eigenschaft Excel :: Application :: UserControl erwähnt, ist aber in einigen Fällen nicht zuverlässig. Wir müssen die folgenden Fälle berücksichtigen, und der benutzerdefinierte Array -Param ist eine Onconnection (...) ist am zuverlässigsten:

  1. Excel begann als unabhängige Anwendung
  2. Excel begann als eingebettete App in einer anderen Anwendung
  3. Excel begann durch Automatisierung, z. B. createObject (...)

Ich habe es vorgezogen, das Addin vollständig zu deaktivieren, wenn sich Excel im eingebetteten Modus befindet. Dies hängt davon ab, welchen Code Sie in Ihrer Onconnection (...) ausführen und wie andere Anwendungen bei der Ausführung darauf reagieren. Punkt Nr. 1 muss implementiert werden, um dieses Problem zu lösen.

Wenn jemand eine bessere Lösung dafür hat, lassen Sie es mich bitte wissen :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top