Procedura: aggiungere comandi a menu di scelta rapida in Excel

In questo esempio viene illustrato come aggiungere un comando a un menu di scelta rapida in Excel tramite un componente aggiuntivo a livello di applicazione. Il menu di scelta rapida viene visualizzato quando si fa clic con il pulsante destro del mouse in una cella di foglio di lavoro. Quando l'utente finale fa clic sul comando, il testo contenuto in tutte le celle selezionate viene scritto in un file di testo.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Excel 2007 ed Excel 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Aggiungere il codice seguente alla classe ThisAddIn in un progetto di componente aggiuntivo a livello di applicazione per Excel.

Esempio

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

Programmazione efficiente

È necessario impostare la proprietà Tag dei controlli quando si aggiungono gestori eventi. La proprietà Tag è utilizzata da Office per tenere traccia dei gestori eventi per uno specifico controllo CommandBarControl. Se la proprietà Tag viene lasciata vuota, gli eventi non verranno gestiti correttamente.

Dichiarare le variabili di menu a livello di classe anziché all'interno del metodo in cui sono chiamate. In questo modo, le variabili resteranno nell'ambito per tutta la durata dell'esecuzione dell'applicazione. In caso contrario, l'elemento verrà rimosso dalla procedura di Garbage Collection e il codice del gestore eventi smetterà di funzionare.

Vedere anche

Attività

Procedura: creare barre degli strumenti di Office

Procedura dettagliata: creazione di menu di scelta rapida per segnalibri

Procedura: aggiungere comandi a menu di scelta rapida in Word

Procedura: aggiungere voci di menu e menu personalizzati a Outlook

Procedura: aggiungere icone personalizzate a voci di menu e barre degli strumenti

Concetti

Parametri facoltativi nelle soluzioni Office

Altre risorse

Personalizzazione dell'interfaccia utente di Office