Como: Adicionar comandos aos Menus de atalho no Excel

Este exemplo demonstra como adicionar um comando em um menu de atalho no Excel usando um suplemento em nível de aplicativo. O menu de atalho aparece quando o botão direito do mouse uma célula da planilha. Quando o usuário final clica no comando, o texto contido em todas as células selecionadas é gravado em um arquivo de texto.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de nível de aplicativo para Excel 2007 e Excel 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Adicione o seguinte código para o ThisAddIn classe em um projeto em nível de aplicativo suplementar para Excel.

Exemplo

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";
}

Programação robusta

Você deve definir o Tag propriedade de seus controles quando você adicionar manipuladores de eventos. Office usa o Tag propriedade para controlar os manipuladores de eventos para uma determinada CommandBarControl. Se a Tag propriedade estiver em branco, os eventos não forem controlados adequadamente.

Declare as variáveis de menu no nível de classe em vez de dentro do método onde eles são chamados. Isso garante que as variáveis de menu permanecerá no escopo, contanto que o aplicativo é executado. Caso contrário, o item é removido pela coleta de lixo e o código de manipulador de eventos pára de funcionar.

Consulte também

Tarefas

Como: Criar barras de ferramentas do Office

Demonstra Passo a passo: A criação de Menus de atalho para indicadores

Como: Adicionar comandos aos Menus de atalho no Word

Como: Adicionar itens de Menu e Menus personalizados para o Outlook

Como: Adicionar ícones personalizados para os itens de Menu e barra de ferramentas

Conceitos

Parâmetros opcionais em soluções do Office

Outros recursos

Personalização de interface do usuário do Office