Exemplarische Vorgehensweise: Hinzufügen von Steuerelementen zu einem Arbeitsblatt zur Laufzeit im VSTO-Add-In-Projekt

Sie können einem beliebigen geöffneten Arbeitblatt Steuerelemente mithilfe eines Excel-VSTO-Add-In hinzufügen. Diese exemplarische Vorgehensweise veranschaulicht, wie Benutzer einem Arbeitsblatt mithilfe des Menübands ein Button, NamedRange und ListObject hinzufügen können. Weitere Informationen finden Sie unter Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit.

Gilt für: Die Informationen in diesem Thema gelten für VSTO-Add-In-Projekte für Excel. Weitere Informationen finden Sie unter Features Available by Office Application and Project Type.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Bereitstellen einer Benutzeroberfläche (UI) zum Hinzufügen von Steuerelementen zum Arbeitsblatt

  • Hinzufügen von Steuerelementen zum Arbeitsblatt

  • Entfernen von Steuerelementen aus dem Arbeitsblatt

    Hinweis

    Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.

Voraussetzungen

Zum Abschließen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Erstellen eines neuen Excel VSTO-Add-In-Projekts

Beginnen Sie mit der Erstellung eines Excel VSTO-Add-In-Projekts.

So erstellen Sie ein neues Excel-VSTO-Add-In-Projekt

  1. Erstellen Sie in Visual Studio ein Excel VSTO-Add-In-Projekt mit dem Namen ExcelDynamicControls. Weitere Informationen finden Sie unter How to: Create Office Projects in Visual Studio.

  2. Fügen Sie einen Verweis auf die Assembly "Microsoft.Office.Tools.Excel.v4.0.Utilities.dll " hinzu. Dieser Verweis ist erforderlich, um einem Arbeitsblatt ein Windows Forms-Steuerelement in dieser exemplarischen Vorgehensweise später programmgesteuert hinzuzufügen.

Bereitstellen einer Benutzeroberfläche zum Hinzufügen von Steuerelementen zu einem Arbeitsblatt

Fügen Sie dem Excel-Menüband eine benutzerdefinierte Registerkarte hinzu. Benutzer können Kontrollkästchen auf der Registerkarte aktivieren, um einem Arbeitsblatt Steuerelemente hinzuzufügen.

So stellen Sie eine Benutzeroberfläche zum Hinzufügen von Steuerelementen zu einem Arbeitsblatt bereit

  1. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

  2. Wählen Sie im Dialogfeld "Neues Element hinzufügen" das Menüband (Visual Designer) aus, und klicken Sie dann auf "Hinzufügen".

    Eine Datei mit dem Namen "Ribbon1.cs " oder "Ribbon1.vb " wird im Menüband-Designer geöffnet und zeigt eine Standardregisterkarte und -gruppe an.

  3. Ziehen Sie auf der Registerkarte "Steuerelemente des Office-Menübands " der Toolbox ein CheckBox-Steuerelement auf Gruppe1.

  4. Klicken Sie auf CheckBox1 , um dieses Steuerelement auszuwählen.

  5. Ändern Sie im Fenster Eigenschaften die folgenden Eigenschaften:

    Eigenschaft Wert
    Name Schaltfläche
    Bezeichnung Schaltfläche
  6. Fügen Sie group1ein zweites Kontrollkästchen hinzu, und ändern Sie dann die folgenden Eigenschaften.

    Eigenschaft Wert
    Name Namedrange
    Bezeichnung Namedrange
  7. Fügen Sie der Gruppe1 ein drittes Kontrollkästchen hinzu, und ändern Sie dann die folgenden Eigenschaften.

    Eigenschaft Wert
    Name Listobject
    Bezeichnung Listobject

Hinzufügen von Steuerelementen zum Arbeitsblatt

Verwaltete Steuerelemente können nur Hostelementen hinzugefügt werden, die als Container fungieren. Da VSTO-Add-in-Projekte mit allen geöffneten Arbeitsmappen funktionieren, konvertiert das VSTO-Add-In das Arbeitsblatt in ein Hostelement oder ruft ein vorhandenes Hostelement ab, bevor das Steuerelement hinzugefügt wird. Fügen Sie den Click-Ereignishandlern jedes Steuerelements Code hinzu, um ein auf dem geöffneten Arbeitsblatt basierendes Worksheet-Hostelement zu generieren. Fügen Sie dann ein Button, NamedRange und ListObject an der aktuellen Auswahlposition in das Arbeitsblatt ein.

So fügen Sie einem Arbeitsblatt Steuerelemente hinzu

  1. Doppelklicken Sie im Menüband-Designer auf "Schaltfläche".

    Der Click Ereignishandler des Kontrollkästchens "Schaltfläche" wird im Code-Editor geöffnet.

  2. Ersetzen Sie den Button_Click -Ereignishandler durch den folgenden Code.

    Dieser Code verwendet die GetVstoObject-Methode, um ein Hostelement abzurufen, das das erste Arbeitsblatt in der Arbeitsmappe darstellt, und fügt der aktuell ausgewählten Zelle dann ein Button-Steuerelement hinzu.

    private void Button_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
        
        string buttonName = "MyButton";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                Microsoft.Office.Tools.Excel.Controls.Button button =
                    new Microsoft.Office.Tools.Excel.Controls.Button();
                worksheet.Controls.AddControl(button, selection, buttonName);
            }
        }
        else
        {
            worksheet.Controls.Remove(buttonName);
        }
    }
    
  3. Wählen Sie in Projektmappen-Explorer "Ribbon1.cs" oder "Ribbon1.vb" aus.

  4. Klicken Sie im Menü "Ansicht" auf "Designer".

  5. Doppelklicken Sie im Menüband-Designer auf NamedRange.

  6. Ersetzen Sie den NamedRange_Click -Ereignishandler durch den folgenden Code.

    Dieser Code verwendet die GetVstoObject-Methode, um ein Hostelement abzurufen, das das erste Arbeitsblatt in der Arbeitsmappe darstellt, und fügt der oder den aktuell ausgewählten Zellen dann ein NamedRange-Steuerelement hinzu.

    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string Name = "MyNamedRange";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddNamedRange(selection, Name);
            }
        }
        else
        {
            worksheet.Controls.Remove(Name);
        }
    }
    
  7. Doppelklicken Sie im Menüband-Designer auf ListObject.

  8. Ersetzen Sie den ListObject_Click -Ereignishandler durch den folgenden Code.

    Dieser Code verwendet die GetVstoObject-Methode, um ein Hostelement abzurufen, das das erste Arbeitsblatt in der Arbeitsmappe darstellt, und fügt der oder den aktuell ausgewählten Zellen dann ein ListObject hinzu.

    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string listObjectName = "MyListObject";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddListObject(selection, listObjectName);
            }
        }
        else
        {
            worksheet.Controls.Remove(listObjectName);
        }
    }
    
  9. Fügen Sie am Anfang der Menüband-Codedatei die folgenden Anweisungen hinzu.

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Tools.Excel;
    using Microsoft.Office.Tools.Excel.Extensions;
    

Entfernen von Steuerelementen aus dem Arbeitsblatt

Steuerelemente werden nicht beibehalten, wenn das Arbeitsblatt gespeichert und geschlossen wird. Sie sollten alle generierten Windows Forms-Steuerelemente programmgesteuert entfernen, bevor das Arbeitsblatt gespeichert wird, ansonsten wird beim erneuten Öffnen der Arbeitsmappe nur ein Umriss des Steuerelements angezeigt. Fügen Sie dem WorkbookBeforeSave-Ereignis Code hinzu, durch den Windows Forms-Steuerelemente aus der Steuerelementauflistung des generierten Hostelements entfernt werden. Weitere Informationen finden Sie unter Beibehalten dynamischer Steuerelemente in Office-Dokumenten.

So entfernen Sie Steuerelemente aus dem Arbeitsblatt

  1. Wählen Sie in Projektmappen-Explorer "ThisAddIn.cs" oder "ThisAddIn.vb" aus.

  2. Klicken Sie im Menü Ansicht auf Code.

  3. Füge der ThisAddIn-Klasse die folgende Methode hinzu. Durch diesen Code wird das erste Arbeitsblatt in der Arbeitsmappe abgerufen und dann anhand der HasVstoObject-Methode überprüft, ob das Arbeitsblatt über ein generiertes Arbeitsblattobjekt verfügt. Wenn das generierte Arbeitsblattobjekt über Steuerelemente verfügt, ruft der Code das Arbeitsblattobjekt ab und durchläuft die Steuerelementauflistung, um Steuerelemente zu entfernen.

           void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
               bool SaveAsUI, ref bool Cancel)
           {
               Excel.Worksheet worksheet =
                   workbook.Worksheets[1] as Excel.Worksheet;
               
               if (Globals.Factory.HasVstoObject(worksheet) && 
                   Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0)
               {
                   Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet);
               
              
                   
                   while (vstoWorksheet.Controls.Count > 0)
                   {
                       object vstoControl = vstoWorksheet.Controls[0];
                       vstoWorksheet.Controls.Remove(vstoControl);
                   }
    
               }
           }
    
  4. In C# müssen Sie einen Ereignishandler für das WorkbookBeforeSave-Ereignis erstellen. Sie können diesen Code in der ThisAddIn_Startup-Methode positionieren. Weitere Informationen zum Erstellen von Ereignishandlern finden Sie unter How to: Create event handlers in Office projects. Ersetzen Sie die ThisAddIn_Startup-Methode durch den folgenden Code.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.WorkbookBeforeSave += 
            new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler
                (Application_WorkbookBeforeSave);
    }
    

Testen der Lösung

Fügen Sie einem Arbeitsblatt Steuerelemente hinzu, indem Sie sie auf einer benutzerdefinierten Registerkarte im Menüband auswählen. Diese Steuerelemente werden beim Speichern des Arbeitsblatts entfernt.

So testen Sie die Projektmappe

  1. Drücken Sie F5, um das Projekt auszuführen.

  2. Wählen Sie eine beliebige Zelle in Tabelle1 aus.

  3. Klicken Sie auf die Registerkarte Add-Ins .

  4. Klicken Sie in der Gruppe1 auf Schaltfläche.

    In der ausgewählten Zelle wird eine Schaltfläche angezeigt.

  5. Wählen Sie eine andere Zelle in Tabelle1 aus.

  6. Klicken Sie in der Gruppe1 auf NamedRange.

    Für die ausgewählte Zelle wird ein benannter Bereich definiert.

  7. Wählen Sie eine Reihe von Zellen in Tabelle1 aus.

  8. Klicken Sie in der Gruppe1 auf ListObject.

    Für die ausgewählten Zellen wird ein Listenobjekt hinzugefügt.

  9. Speichern Sie das Arbeitsblatt.

    Die Steuerelemente, die Sie Tabelle1 hinzugefügt haben, werden nicht mehr angezeigt.

Nächste Schritte

Im folgenden Thema erfahren Sie mehr über Steuerelemente in Excel-VSTO-Add-In-Projekten: