2016-06-28 17 views
0

Ich arbeite mit einem Produkt basierend auf Excel-Dokument-Level-Anpassung. Der Projekttyp ist "Excel 2013-Vorlage" in Visual Studio.Excel User Defined Function Probleme mit Excel-Vorlage

Kürzlich habe ich eine benutzerdefinierte Funktion entwickelt, die zur Auswertung unserer eigenen Funktion verwendet wird. Ich habe die benutzerdefinierte Funktion basierend auf dem Artikel https://blogs.msdn.microsoft.com/eric_carter/2004/12/01/writing-user-defined-functions-for-excel-in-net/

entwickelt Die benutzerdefinierte Funktion funktioniert gut mit der Excel-Vorlage unseres Produkts, aber es schlägt für einen Testfall fehl.

  1. Öffnen Sie eine neue Excel-Vorlage des Produkts. [ex: Excel-Vorlage 1]
  2. Fügen Sie die benutzerdefinierte Funktion zu einer Zelle hinzu. [Wertet das Ergebnis erfolgreich aus]
  3. Öffnen Sie eine andere Excel-Vorlage des Produkts. [ex: Excel-Vorlage 2]
  4. Fügen Sie die benutzerdefinierte Funktion zu einer Zelle hinzu. [Wertet das Ergebnis erfolgreich]
  5. Schließen Sie die in Schritt geöffnet Vorlage 1. [dh: Excel-Vorlage 1)]
  6. die User Defined Function In einer Zelle anderer template [dh: Excel-Vorlage 2]

Jetzt kann ich bemerken, dass die hinzugefügte Funktion nicht ausgewertet wird und endet mit "#NAME?" - Fehler.

Ich habe die benutzerdefinierte Funktion aus der Excel-Add-in-Liste überprüft. Es ist aktiv. Irgendwie habe ich das Add-In programmgesteuert in ActivateEvent der Arbeitsmappe, aber keine Verwendung neu installiert.

Dieses Problem tritt nur auf, wenn ich die Vorlage schließe, die zuerst geöffnet wurde. Weitere dieses Problem wird nicht für gespeicherte Arbeitsbücher da sein.

Als ich debuggte, fand ich ein Problem. In unserem Produkt haben wir unsere eigenen Befehlsleisten, die dem Excel-Kontextmenü hinzugefügt werden, wenn unsere Anpassung geöffnet wird. Der folgende Beispielcode fügt dem Kontextmenü der Zelle eine Befehlsleistenschaltfläche hinzu.

try 
{ 
    commandBars = (Office.CommandBars)Application.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, Application, new object[] { }); 
    commandBarSheetMenu = commandBars["Cell"];     
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
commandBarButtonTest = (Office.CommandBarButton)commandBarSheetMenu.Controls.Add(1, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
commandBarButtonTest.BeginGroup = true; 
commandBarButtonTest.Caption = "Test Me"; 
commandBarButtonTest.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonSheetCopy_Click); 

Wenn ich die User Defined Function Beginn der Arbeit den obigen Code entfernen/kommentieren, auch wenn ich das zum ersten Mal geöffnet Vorlage zu schließen.

Ist es ein bekanntes Problem mit der Excel-Vorlage und benutzerdefinierten Funktion, wenn es mit Befehlsleisten verwendet wird?

Es wäre großartig, wenn jemand das Problem kommentieren und eine Lösung für dieses Problem vorschlagen könnte.

+0

Quelldateien zu beheben das Problem neu erstellen, um https://1drv.ms/u/s!AKQQ5XmOgV6CgQE hochgeladen –

+0

Hat jemand ein Update für dieses Problem? –

Antwort

0

Ich kann dieses Problem auch ohne Befehlsleisten neu erstellen. Das gleiche Problem existiert für den obigen Testfall, wenn ich die benutzerdefinierte Funktion programmgesteuert zu jeder Excel-Zelle festlegen.

Ich habe zwei Demo-Lösungen erstellt, die verwendet werden können, um das Problem neu zu erstellen, indem Sie den obigen Testfall befolgen. Diese Demo-Lösungen sind

  1. Programmgesteuert die benutzerdefinierte Funktion auf Knopfdruck auf eine ausgewählte Zelle einstellen.
  2. Arbeitsmappe Template Customization mit benutzerdefinierten Befehlsleisten

Y ou die Quelldateien vonhttps://1drv.ms/u/s!AKQQ5XmOgV6CgQE

Ich habe die Readme Dateien innerhalb dieser Lösungen separat mit den Anweisungen und Schritte enthalten können, um wieder -Erstellen Sie das Problem.

Es wäre toll, wenn einige Experten in diesem Bereich mir eine Lösung geben, können dieses Problem

+0

Hat jemand ein Update zu diesem Thema? –

Verwandte Themen