Aggiunta di elementi a un menu contestuale (Microsoft Excel)
Quando fai clic con il pulsante destro del mouse su una cella, Excel ti fornisce un menu contestuale ricco di funzionalità che ti consente di fare un numero qualsiasi di cose. Potresti voler aggiungere alcune funzionalità a quel menu contestuale, in particolare se sono funzioni che usi spesso.
Sfortunatamente, non puoi modificare i menu contestuali nello stesso modo in cui puoi modificare altri menu, utilizzando Personalizza dal menu Strumenti. Invece, è necessario manipolare i menu contestuali tramite VBA.
Se vuoi aggiungere un elemento al menu contestuale che appare quando fai clic con il tasto destro su una cella, puoi utilizzare il seguente codice:
Sub AddItemToContextMenu() Dim cmdNew As CommandBarButton Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True End With End Sub
Tutto quello che devi fare è impostare la proprietà .Caption su qualsiasi testo di menu che desideri utilizzare, quindi modificare la proprietà .OnAction in modo che punti a una macro o al comando che desideri utilizzare. Quando in seguito si desidera rimuovere l’opzione di menu, è possibile utilizzare la seguente macro:
Sub RemoveContextMenuItem() On Error Resume Next CommandBars("cell").Controls("My Procedure").Delete End Sub
Per utilizzare ciò, modificare il testo “My Procedure” in qualsiasi testo utilizzato nella proprietà .Caption della macro precedente. L’istruzione On Error viene utilizzata in questa macro solo nel caso in cui l’elemento macro specificato non fosse stato aggiunto in precedenza.
Modificando solo un po ‘la tua macro, puoi specificare che l’aggiunta al menu contestuale deve avvenire solo facendo clic con il tasto destro su celle specifiche. La seguente macro verifica se stai facendo clic su una cella nell’intervallo C10: E25. Se lo sei, aggiunge un’opzione di menu per la tua procedura alla fine del menu contestuale.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) Dim cmdNew As CommandBarButton For Each icbc In Application.CommandBars("cell").Controls If icbc.Tag = "brccm" Then icbc.Delete Next icbc If Not Application.Intersect(Target, Range("c10:e25")) _ Is Nothing Then Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True .Tag = "brccm" End With End If End Sub
Nell’editor VBA, questa macro deve essere aggiunta al foglio di lavoro specifico con cui desideri utilizzarla. Tutto quello che devi fare è fare doppio clic su quel foglio di lavoro, in Project Explorer (angolo in alto a sinistra dell’editor VBA), e quindi inserirlo nella finestra del codice per quel foglio di lavoro.
Come con la macro precedente, tutto ciò che devi fare è modificare le impostazioni specificate per le proprietà .Caption e .OnAction. Inoltre, potresti voler modificare l’intervallo di celle considerato “valido” quando aggiungi una scelta di menu: modifica semplicemente la specifica dell’intervallo “c: 10: e25” nell’intervallo desiderato. Puoi persino utilizzare un intervallo denominato al posto dell’intervallo di celle, il che è ottimo se l’intervallo valido è in realtà un insieme di celle non contigue.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (2064) si applica a Microsoft Excel 97, 2000, 2002 e 2003.