Ciao Igor
ed un saluto particolare ad Alfredo.
Ricordo che avevo fatto qualcosa del genere e, spulciando fra le mie scartoffie, ho trovato qualche indizio e, credo, la soluzione.
Innanzi tutto devi rendere accessibile il progetto VBA. Vai sul logo in alto a sinistra del Foglio Excel e scegli Opzioni di Excel (in basso a destra), seleziona Centro Protezione e poi Impostazioni Centro Protezione. Nella maschera che vedi devi spuntare la casella in basso dove dice: Considera attendibile l'accesso al modello a oggetti dei progetti VBA.
Tieni presente che per mia comodità e per meglio farti vedere il processo, devi seguire questi passi:
1) nella cella A1 - inserisci il Numero del pulsante da eliminare;
2) copia e incolla nel Modulo Standard la macro che vedi sotto e associala ad un pulsante (non ActiveX) che mettera nel tuo Foglio.
Ti verrà mostrato un messaggio che indica quale Shape la macro sta analizzando. Questo messaggio può essere tolto.
Sub ElimCmdMacro()
Dim i As Integer, num As Integer
Dim macro As String
Dim VBCodeMod, vbext_pk_Proc
Dim nInizio As Long
Dim nRighe As Long
num = [A1]
For i = 1 To ActiveSheet.Shapes.Count
MsgBox ActiveSheet.Shapes(i).Name
If num > 0 And ActiveSheet.Shapes(i).Name = "CommandButton" & num Then
macro = "CommandButton" & num & "_Click"
'la riga seguente elimina il pulsante richiesto
ActiveSheet.Shapes(i).delete
'le righe seguenti eliminano il codice relativo al pulsante
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Foglio1").CodeModule
With VBCodeMod
nInizio = .ProcStartLine(macro, vbext_pk_Proc)
On Error Resume Next
nRighe = .ProcCountLines(macro, vbext_pk_Proc)
.DeleteLines nInizio, nRighe
End With
End If
Next i
Set VBCodeMod = Nothing
End Sub
Vedi se va bene e fai sapere. Ciao e Buon Natale a tutti,
Mario