Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

delete commandbutton e macro

Ultimo Aggiornamento: 25/12/2016 19:09
Post: 137
Registrato il: 17/07/2011
Età: 27
Utente Junior
excel 2000/2007
OFFLINE
22/12/2016 22:11

Ciao,
questa macro:

Option Explicit

Sub delete()

On Error Resume Next 'delete commandbutton

    ActiveSheet.OLEObjects.Visible = True
    
    'ActiveSheet.OLEObjects("CommandButton1").delete
    'ActiveSheet.OLEObjects("CommandButton2").delete
    'ActiveSheet.OLEObjects("CommandButton3").delete
    'ActiveSheet.OLEObjects("CommandButton4").delete
    
    ActiveSheet.OLEObjects.delete
    
    On Error GoTo 0
   
End Sub



elimina dal foglio i vari commandbutton, ma per eliminare anche le macro collegate è possibile?
Allego l'esempio.
igor
[Modificato da igor_62 22/12/2016 22:24]


excel 2007
Post: 2.507
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Veteran
Excel 365
OFFLINE
22/12/2016 23:32

Ciao Igor

La cosa è fattibile ma non delle più semplici.

Facendo l'ipotesi meno complicata ossia che che le macro siano in un unico modulo questa macro rimuove tale modulo

vb
    Sub DeleteModule()
        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
    
        Set VBProj = ActiveWorkbook.VBProject
        Set VBComp = VBProj.VBComponents("Modulo1")
        VBProj.VBComponents.Remove VBComp
    End Sub


Ovviamente devi sostituire "Modulo1" con il nome effettivo del tuo modulo.

Attenzione: va preventivamente attivata in Strumenti, Riferimenti la libreria "Microsoft Visual Basic For Applications Extensibility 5.3"

Se invece le macro sono su moduli diversi allora la faccenda si complica.

Alfredo
Post: 137
Registrato il: 17/07/2011
Età: 27
Utente Junior
excel 2000/2007
OFFLINE
23/12/2016 21:18

Ciao Alfredo.
Non ho provato ma penso non funzioni.
Le macro come nell'allegato non sono in un modulo ma in microsoft > oggetti > foglio 1 ( nel modulo del foglio)
igor


excel 2007
Post: 2.508
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Veteran
Excel 365
OFFLINE
23/12/2016 22:21

Si Igor riflettendoci poi sono arrivato alla tua stessa conclusione.

Occorrerebbe studiare un po' la cosa

Alfredo
Post: 287
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Junior
Excel2019
OFFLINE
25/12/2016 18:06

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
Post: 140
Registrato il: 17/07/2011
Età: 27
Utente Junior
excel 2000/2007
OFFLINE
25/12/2016 19:09

Grazie marius,
intanto buon natale.
La tua macro funziona qui a casa ma la deve provare in ufficio se posso farlo.
Un saluto e grazie.
igor


excel 2007
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:53. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com