Exemplarische Vorgehensweise: Hinzufügen von Steuerelementen zu einem Arbeitsblatt zur Laufzeit in einem Projekt auf Anwendungsebene
Sie können mit einem Excel-Add-In Steuerelemente jedem geöffneten Arbeitsblatt hinzufügen.In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie den Benutzern mithilfe des Menübands die Möglichkeit geben, einem Arbeitsblatt eine Button, einen NamedRange und ein ListObject hinzuzufügen.Weitere Informationen finden Sie unter Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit.
Gilt für:, das die Informationen in diesem Thema Projekten auf Anwendungsebene Excel 2010 anwenden.Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:
Bereitstellen einer Benutzeroberfläche zum Hinzufügen von Steuerelementen zum Arbeitsblatt
Hinzufügen von Steuerelementen zum Arbeitsblatt
Entfernen von Steuerelementen aus dem Arbeitsblatt
Hinweis |
---|
Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen. |
Vorbereitungsmaßnahmen
Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:
-
Eine Version von Visual Studio 2012, die die Microsoft Office-Entwicklungstools einschließt. Weitere Informationen finden Sie unter [Konfigurieren eines Computers zum Entwickeln von Office-Lösungen](bb398242\(v=vs.110\).md).
- Excel 2013 oder Excel 2010.
Erstellen eines neuen Excel-Add-In-Projekts
Erstellen Sie zunächst ein Excel-Add-In-Projekt.
So erstellen Sie ein neues Excel-Add-In-Projekt
Erstellen Sie in Visual Studio ein Excel-Add-In-Projekt mit der Bezeichnung "ExcelDynamicControls".Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Office-Projekten in Visual Studio.
Fügen Sie einen Verweis auf die Microsoft.Office.Tools.Excel.v4.0.Utilities.dll Assembly hinzu.Dieser Verweis ist erforderlich, um einem Arbeitsblatt später in dieser exemplarischen Vorgehensweise programmgesteuert ein Windows Forms-Steuerelement 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.Die 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
Klicken Sie im Menü Projekt auf Neues Element hinzufügen.
Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Menüband (Visual Designer) aus, und klicken Sie auf Hinzufügen.
Eine Datei mit dem Namen Ribbon1.cs oder Ribbon1.vb wird im Menüband-Designer geöffnet. Sie enthält eine Standardregisterkarte und eine Gruppe.
Ziehen Sie von der Registerkarte Steuerelemente für Office-Menübänder der Toolbox ein Kontrollkästchen auf group1.
Klicken Sie auf CheckBox1, um das Element auszuwählen.
Ändern Sie im Eigenschaftenfenster die folgenden Eigenschaften.
Eigenschaft
Wert
Name
Button
Bezeichnung
Button
Fügen Sie ein zweites Kontrollkästchen zu group1 hinzu, und ändern Sie dann die folgenden Eigenschaften.
Eigenschaft
Wert
Name
NamedRange
Bezeichnung
NamedRange
Fügen Sie ein drittes Kontrollkästchen zu group1 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 Add-In-Projekte mit allen geöffneten Arbeitsmappen verwendet werden können, konvertiert das 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 Worksheet-Hostelement zu generieren, das auf dem geöffneten Arbeitsblatt beruht.Fügen Sie dann bei der aktuellen Auswahl im Arbeitsblatt eine Button, einen NamedRange und ein ListObject hinzu.
So fügen Sie einem Arbeitsblatt Steuerelemente hinzu
Doppelklicken Sie im Menüband-Designer auf Button.
Der Click-Ereignishandler des Kontrollkästchens Button wird im Code-Editor geöffnet.
Ersetzen Sie den Button_Click-Ereignishandler durch 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 anschließend ein Button-Steuerelement hinzu.
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles Button.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim buttonName As String = "MyButton" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim button As New Microsoft.Office.Tools.Excel.Controls.Button() worksheet.Controls.AddControl(button, selection, buttonName) End If Else worksheet.Controls.Remove(buttonName) End If End Sub
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); } }
Wählen Sie im Projektmappen-Explorer die Datei Ribbon1.cs oder Ribbon1.vb aus.
Klicken Sie im Menü Ansicht auf Designer.
Doppelklicken Sie im Menüband-Designer auf NamedRange.
Ersetzen Sie den NamedRange_Click-Ereignishandler durch folgenden Code.
Dieser Code verwendet die GetVstoObject-Methode, um ein Hostelement abzurufen, das das erste Arbeitsblatt in der Arbeitsmappe darstellt, und definiert anschließend ein NamedRange-Steuerelement für die aktuell ausgewählte(n) Zelle(n).
Private Sub NamedRange_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles NamedRange.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim rangeName As String = "MyNamedRange" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim namedRange As NamedRange = _ worksheet.Controls.AddNamedRange(selection, rangeName) End If Else worksheet.Controls.Remove(rangeName) End If End Sub
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); } }
Doppelklicken Sie im Menüband-Designer auf ListObject.
Ersetzen Sie den ListObject_Click-Ereignishandler durch folgenden Code.
Dieser Code verwendet die GetVstoObject-Methode, um ein Hostelement abzurufen, das das erste Arbeitsblatt in der Arbeitsmappe darstellt, und definiert anschließend ein ListObject für die aktuell ausgewählte(n) Zelle(n).
Private Sub ListObject_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ListObject.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) Dim listObjectName As String = "MyListObject" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = _ Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then worksheet.Controls.AddListObject(selection, listObjectName) End If Else worksheet.Controls.Remove(listObjectName) End If End Sub
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); } }
Fügen Sie am Anfang der Menüband-Codedatei die folgenden Anweisungen hinzu.
Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Tools.Excel Imports Microsoft.Office.Tools.Excel.Extensions
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Excel; using Microsoft.Office.Tools.Excel.Extensions;
Entfernen von Steuerelementen aus dem Arbeitsblatt
Steuerelemente bleiben beim Speichern und Schließen des Arbeitsblatts nicht erhalten.Sie sollten alle generierten Windows Forms-Steuerelemente programmgesteuert entfernen, bevor das Arbeitsblatt gespeichert wird, da andernfalls beim erneuten Öffnen der Arbeitsmappe nur eine Kontur des Steuerelements angezeigt wird.Fügen Sie dem WorkbookBeforeSave-Ereignis Code hinzu, mit dem Windows Forms-Steuerelemente aus der Steuerelementauflistung des generierten Hostelements entfernt werden.Weitere Informationen finden Sie unter Beibehalten von dynamischen Steuerelementen in Office-Dokumenten.
So entfernen Sie Steuerelemente aus dem Arbeitsblatt
Wählen Sie im Projektmappen-Explorer die Datei ThisAddIn.cs oder ThisAddIn.vb aus.
Klicken Sie im Menü Ansicht auf Code.
Fügen Sie der ThisAddIn-Klasse die folgende Methode hinzu.Dieser Code ruft das erste Arbeitsblatt in der Arbeitsmappe ab und prüft anschließend mithilfe der HasVstoObject-Methode, ob das Arbeitsblatt ein Arbeitsblattobjekt generiert hat.Wenn das generierte Arbeitsblattobjekt Steuerelemente enthält, ruft der Code dieses Arbeitsblattobjekt, durchläuft die Steuerelementauflistung und entfernt die Steuerelemente.
Sub Application_WorkbookBeforeSave _ (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _ ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _ Handles Application.WorkbookBeforeSave Dim worksheet As Excel.Worksheet = workbook.Worksheets(1) If Globals.Factory.HasVstoObject(worksheet) And Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet) While vstoWorksheet.Controls.Count > 0 Dim vstoControl As Object = vstoWorksheet.Controls(0) vstoWorksheet.Controls.Remove(vstoControl) End While End If End Sub
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); } } }
In C# müssen Sie einen Ereignishandler für das WorkbookBeforeSave-Ereignis erstellen.Sie können diesen Code in die ThisAddIn_Startup-Methode einfügen.Weitere Informationen zum Erstellen von Ereignishandlern finden Sie unter Gewusst wie: Erstellen von Ereignishandlern in Office-Projekten.Ersetzen Sie die ThisAddIn_Startup-Methode durch 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 Projektmappe
Fügen Sie Steuerelemente einem Arbeitsblatt hinzu, indem Sie sie auf einer benutzerdefinierten Registerkarte des Menübands auswählen.Beim Speichern des Arbeitsblatts werden diese Steuerelemente entfernt.
So testen Sie die Projektmappe
Drücken Sie F5, um das Projekt auszuführen.
Wählen Sie jede Zelle in Sheet1 aus.
Klicken Sie auf die Registerkarte Add-Ins.
Klicken Sie in der Gruppe group1 auf Button.
In der ausgewählten Zelle wird eine Schaltfläche angezeigt.
Wählen Sie in Sheet1 eine andere Zelle aus.
Klicken Sie in der Gruppe group1 auf NamedRange.
Für die ausgewählte Zelle wird ein benannter Bereich definiert.
Wählen Sie in Sheet1 eine Reihe von Zellen aus.
Klicken Sie in der Gruppe group1 auf ListObject.
Den ausgewählten Zellen wird ein Listenobjekt hinzugefügt.
Speichern Sie das Arbeitsblatt.
Die Steuerelemente, die Sie Sheet1 hinzugefügt haben, werden nicht mehr angezeigt.
Nächste Schritte
Unter folgendem Thema erfahren Sie mehr über Steuerelemente in Excel-Add-In-Projekten:
- Informationen zum Speichern von Steuerelementen in einem Arbeitsblatt finden Sie im Beispiel für dynamische Add-In-Steuerelemente in Excel unter Beispiele und exemplarische Vorgehensweisen für die Programmierung mit Office.
Siehe auch
Konzepte
Übersicht über Windows Forms-Steuerelemente in Office-Dokumenten