Exemplarische Vorgehensweise: Hinzufügen von Steuerelementen zu einem Arbeitsblatt zur Laufzeit in einem Projekt auf Anwendungsebene
Aktualisiert: Juli 2008
Betrifft |
---|
Die Informationen in diesem Thema gelten nur für die angegebenen Projekte und Versionen von Visual Studio Tools for Office von Microsoft Office. Projekttyp
Microsoft Office-Version
Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp. |
Sie können Steuerelemente jedem geöffneten Arbeitsblatt mit einem Excel 2007-Add-In hinzufügen. In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie den Benutzern mithilfe der Multifunktionsleiste 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.
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
![]() |
---|
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:
Visual Studio Tools for Office (eine optionale Komponente von Visual Studio 2008 Professional und Visual Studio Team System).
Visual Studio 2008 Service Pack 1 (SP1).
Microsoft Office Excel 2007.
Erstellen eines neuen Excel-Add-In-Projekts
Erstellen Sie zunächst ein Excel 2007-Add-In-Projekt.
So erstellen Sie ein neues Excel-Add-In-Projekt
Erstellen Sie in Visual Studio ein Excel 2007-Add-In-Projekt mit der Bezeichnung ExcelDynamicControls.
Wählen Sie im Dialogfeld Neues Projekt die Option Projektmappenverzeichnis erstellen.
Speichern Sie das Projekt an einem beliebigen Ort.
Weitere Informationen hierzu finden Sie unter Gewusst wie: Erstellen von Visual Studio Tools for Office-Projekte.
Bereitstellen einer Benutzeroberfläche zum Hinzufügen von Steuerelementen zu einem Arbeitsblatt
Fügen Sie der Excel 2007-Multifunktionsleiste 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 Multifunktionsleiste (Visual Designer) aus, und klicken Sie auf Hinzufügen.
Eine Datei mit dem Namen Ribbon1.cs oder Ribbon1.vb wird im Multifunktionsleisten-Designer geöffnet. Sie enthält eine Standardregisterkarte und eine Gruppe.
Ziehen Sie von der Registerkarte Steuerelemente für Office-Multifunktionsleisten der Toolbox ein Kontrollkästchen auf group1.
Klicken Sie auf CheckBox1, um das Element auszuwählen.
Ändern Sie im Eigenschaftenfenster die folgenden Eigenschaften.
Property
Value
Name
Button
Bezeichnung
Button
Fügen Sie ein zweites Kontrollkästchen zu group1 hinzu, und ändern Sie dann die folgenden Eigenschaften.
Property
Value
Name
NamedRange
Bezeichnung
NamedRange
Fügen Sie ein drittes Kontrollkästchen zu group1 hinzu, und ändern Sie dann die folgenden Eigenschaften.
Property
Value
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 Multifunktionsleisten-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 worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() 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 = ((Excel.Worksheet) Globals.ThisAddIn.Application. ActiveWorkbook.Worksheets[1]).GetVstoObject(); 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 Multifunktionsleisten-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 worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() 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 = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook. Worksheets[1]).GetVstoObject(); 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 Multifunktionsleisten-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 worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() 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 = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook. Worksheets[1]).GetVstoObject(); 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 Multifunktionsleisten-Codedatei die folgenden using-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 hierzu 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ü Code auf anzeigen.
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 Visual Studio Tools for Office-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 worksheet.HasVstoObject() And worksheet.GetVstoObject().Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = worksheet.GetVstoObject() 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 (worksheet.HasVstoObject() && worksheet.GetVstoObject().Controls.Count > 0) { Worksheet vstoWorksheet = worksheet.GetVstoObject(); 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 Visual Studio Tools for Office. 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 Projektmappe
Fügen Sie Steuerelemente einem Arbeitsblatt hinzu, indem Sie sie auf einer benutzerdefinierten Registerkarte der Multifunktionsleiste 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 2007-Add-In-Projekten:
- Informationen zum Speichern von Steuerelementen in einem Arbeitsblatt finden Sie unter Beispiel für dynamische Add-In-Steuerelemente in Excel.
Siehe auch
Konzepte
Entwicklung von Add-Ins auf Anwendungsebene für Excel
Verwenden von Windows Forms-Steuerelementen in Excel-Arbeitsblättern
Weitere Ressourcen
Steuerelemente für Office-Dokumente
Änderungsprotokoll
Date |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Thema hinzugefügt. |
SP1-Featureänderung. |