2014-12-19 7 views
6

Ich habe erfolgreich die Microsoft Probe „Exemplarische Vorgehensweise: Synchronisieren einen benutzerdefinierten Aufgabenbereich mit einem Band-Knopf“ hier: http://msdn.microsoft.com/en-us/library/bb608590.aspxBenutzerdefinierte Aufgabenbereich mit mehreren geöffneten Arbeitsmappe

Zunächst ich in ein Problem mit dem Aufgabenbereich lief nicht angezeigt, was das Ergebnis eines Konflikts zwischen meinem Add-In und dem "Analysis Toolpack" von Microsoft war. Nachdem ich das Analyse-Toolpack deaktiviert hatte, wurde der benutzerdefinierte Aufgabenbereich wie erwartet angezeigt und ausgeblendet.

Ich schrieb dann einen Code, um Zellen in einem ausgewählten Bereich zu ändern, wenn der Benutzer eine Taste drückt. Das schien gut zu funktionieren - bis ich eine weitere Arbeitsmappe öffnete! Jedes Arbeitsmappenfenster verfügt über eine eigene Add-In-Multifunktionsleiste. Wenn ich jedoch auf die Umschaltfläche zum Öffnen/Schließen des benutzerdefinierten Aufgabenbereichs klickte, wurde nur der benutzerdefinierte Aufgabenbereich für das erste erstellte Fenster geöffnet/geschlossen. Dies ist unabhängig davon, welches Fenster, das ich in dem Toggle-Button klicken.

Der Code instanziiert das CustomTaskPane Objekt in ThisAddIn_Startup (wie im Beispielcode). Das einzige, was ich hinzugefügt habe, ist wirklich die Button-Aktion in dem Usercontrol:

using xl = Microsoft.Office.Interop.Excel; 

namespace SynchronizeTaskPaneAndRibbon 
{ 
    public partial class TaskPaneControl : UserControl 
    { 
     public TaskPaneControl() 
     { 
      InitializeComponent(); 
     } 

     private void actionButton1_Click(object sender, EventArgs e) 
     { 
      xl.Range selection_rng = Globals.ThisAddIn.Application.Selection; 

      foreach (xl.Range cell in selection_rng.Cells) 
      { 
       if (cell.Value is string) 
       { 
        string v = cell.Value; 
        cell.Value = v + "*"; 
       } 
      } 
     } 
    } 
} 

Der Rest des Codes ist nur, wie es in dem Beispiel.

Gibt es eine Möglichkeit, das Beispiel so zu ändern, dass es für das Öffnen mehrerer Arbeitsmappen funktioniert? Ich möchte, dass das gleiche Add-In in jedem Arbeitsmappenfenster mit derselben Multifunktionsleiste und demselben benutzerdefinierten Bereich angezeigt wird. Und natürlich, um Band Aktionen (wie ein Tastendruck) zu dem benutzerdefinierten Aufgabenbereich, der im selben Fenster angezeigt wird.

Antwort

0

Ja, es ist ein weiteres Beispiel auf MSDN, die zum Verwalten von benutzerdefinierten taskpanes in mehreren Dokumenten sprechen. Beachten Sie, dass dies aus der Perspektive von Word/InfoPath erfolgt, die zugrunde liegende Idee jedoch auch für Excel identisch ist.

Grob gesagt, müssen Sie eine neue TaskPane für aktuelle Arbeitsmappe hinzufügen, wenn es nicht ein hat. Verschieben Sie daher das Hinzufügen von benutzerdefinierten Taskpanel-Logik vom Addin-Start zum Ribbon-Button-Klick-Ereignis. Wenn Sie dies im Schaltflächenklickereignis tun, können Sie dem aktuellen Dokument einen neuen Aufgabenbereich hinzufügen, wenn auf das Menüband geklickt wird.

-Link: https://msdn.microsoft.com/en-us/library/bb264456(v=office.12).aspx?f=255&MSPPError=-2147217396#Anchor_2

Setzt man den nützlichen Code-Schnipsel unten im Fall geht der Link tot in Zukunft:

//Add a custom taskpane to active Word document 
public void AddCalendarTaskPane(Word.Document doc) 
{ 
    ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(), 
     "Select a date", doc.ActiveWindow); 
    ctpCalendar.Visible = true; 
} 

Statt zu entfernen, empfehle ich von Makeln Visible-Flag auf Falsch die TaskPane versteckt, aber YMMV . Hoffe das hilft.

Verwandte Themen