Gewusste wie: Hinzufügen von Befehlen zu Kontextmenüs in Excel
In diesem Beispiel wird veranschaulicht, wie einem Kontextmenü in Excel mit einem Add-In auf Anwendungsebene ein Befehl hinzugefügt wird. Das Kontextmenü wird angezeigt, wenn Sie mit der rechten Maustaste auf eine Zelle des Arbeitsblatts klicken. Wenn der Endbenutzer auf den Befehl klickt, wird der in allen ausgewählten Zellen enthaltene Text in eine Textdatei geschrieben.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und auf Anwendungsebene für Excel 2007 und Excel 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
Fügen Sie der ThisAddIn-Klasse in einem Projekt auf Anwendungsebene für Excel den folgenden Code hinzu.
Beispiel
Private WithEvents writeToText As Office.CommandBarButton
Private selectedCells As Excel.Range
Private Sub ThisAddIn_Startup(ByVal sender _
As Object, ByVal e As System.EventArgs) Handles Me.Startup
DefineShortcutMenu()
End Sub
Private Sub DefineShortcutMenu()
Dim menuItem As Office.MsoControlType = Office.MsoControlType.msoControlButton
writeToText = Application.CommandBars("Cell").Controls.Add(Type:=menuItem, _
Before:=1, Temporary:=True)
writeToText.Style = Office.MsoButtonStyle.msoButtonCaption
writeToText.Caption = "Write to a Text File"
writeToText.Tag = "0"
End Sub
Private Sub Application_SheetBeforeRightClick(ByVal Sh _
As Object, ByVal Target As Excel.Range, _
ByRef Cancel As Boolean) Handles Application.SheetBeforeRightClick
selectedCells = Target
End Sub
Private Sub writeToText_Click(ByVal Ctrl As Office.CommandBarButton, _
ByRef CancelDefault As Boolean) Handles writeToText.Click
Try
Dim currentDateTime As System.DateTime = _
System.DateTime.Now
Dim dateStamp As String = _
currentDateTime.ToString("dMMMMyyyy_hh.mm.ss")
Dim fileName As String = System.Environment.GetFolderPath( _
Environment.SpecialFolder.MyDocuments) & "\\" & _
dateStamp & ".txt"
Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fileName)
For Each cell As Excel.Range In selectedCells.Cells
If cell.Value2 IsNot Nothing Then
sw.WriteLine(cell.Value2.ToString())
End If
Next
sw.Close()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub
private Office.CommandBarButton writeToText;
private Excel.Range selectedCells;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
DefineShortcutMenu();
Application.SheetBeforeRightClick +=
new Excel.AppEvents_SheetBeforeRightClickEventHandler
(Application_SheetBeforeRightClick);
writeToText.Click +=
new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler
(writeToText_Click);
}
void writeToText_Click(Office.CommandBarButton Ctrl,
ref bool CancelDefault)
{
try
{
System.DateTime currentDateTime = System.DateTime.Now;
string dateStamp = currentDateTime.ToString("dMMMMyyyy_hh.mm.ss");
string fileName =
System.Environment.GetFolderPath
(Environment.SpecialFolder.MyDocuments) + "\\\\" + dateStamp + ".txt";
System.IO.StreamWriter sw = new System.IO.StreamWriter(fileName);
foreach (Excel.Range cell in selectedCells.Cells)
{
if (cell.Value2 != null)
{
sw.WriteLine(cell.Value2.ToString());
}
}
sw.Close();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
void Application_SheetBeforeRightClick(object Sh,
Excel.Range Target, ref bool Cancel)
{
selectedCells = Target;
}
private void DefineShortcutMenu()
{
Office.MsoControlType menuItem = Office.MsoControlType.msoControlButton;
writeToText = (Office.CommandBarButton)Application.CommandBars["Cell"].
Controls.Add(menuItem, missing, missing, 1, true);
writeToText.Style = Office.MsoButtonStyle.msoButtonCaption;
writeToText.Caption = "Write to a Text File";
writeToText.Tag = "0";
}
Robuste Programmierung
Sie müssen beim Hinzufügen von Ereignishandlern die Tag-Eigenschaft der Steuerelemente festlegen. Office verwendet die Tag-Eigenschaft, um Ereignishandler für ein bestimmtes CommandBarControl-Objekt zu verfolgen. Wenn die Tag-Eigenschaft leer ist, werden Ereignisse nicht ordnungsgemäß behandelt.
Deklarieren Sie die Menüvariablen auf Klassenebene und nicht in der Methode, in der sie aufgerufen werden. Damit ist sichergestellt, dass die Menüvariablen so lange im Gültigkeitsbereich bleiben, wie die Anwendung ausgeführt wird. Ansonsten wird das Element von der Garbage Collection entfernt, und die Ausführung des Codes im Ereignishandler wird angehalten.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Office-Symbolleisten
Exemplarische Vorgehensweise: Erstellen von Kontextmenüs für Lesezeichen
Gewusst wie: Hinzufügen von Befehlen zu Kontextmenüs in Word
Gewusst wie: Hinzufügen von benutzerdefinierten Menüs und Menüelementen zu Outlook
Gewusst wie: Hinzufügen benutzerdefinierter Symbole zu Symbolleisten- und Menüelementen
Konzepte
Optionale Parameter in Office-Lösungen