Elimina pulsante macro



  • Elimina pulsante macro
    di Alessio (utente non iscritto) data: 16/10/2013 22:08:43

    Vorrei chiedervi un piccolo miracolo: è possibile che se si elimina un pulsante macro nella cella A1 per esempio ci fosse il numero 1? Io ho un foglio con diversi pulsanti macro, però mi riferisco ad uno solo di quelli. C'è qualche consiglio?



  • di Vecchio Frac data: 17/10/2013 09:00:50

    Sai che non ho mica capito? ^_^
    Cioè tu elimini un pulsante presente in una cella e vuoi inserire un numero in quella cella dopo tale operazione?





  • di Alessio (utente non iscritto) data: 17/10/2013 14:20:06

    Non in quella cella, ma in una qualsiasi per esempio A1. È possibile?



  • di Vecchio Frac data: 17/10/2013 14:35:38

    Ma a cosa ti serve eliminare un pulsante in una cella?
    Comunque puoi farlo attraverso un altro pulsante di comando cui è associata questa macro, per esempio, al suo evento click:
     
    Private Sub CommandButton1_Click()
        ActiveSheet.Shapes("CommandButton2").Delete
    End Sub






  • di Alessio (utente non iscritto) data: 17/10/2013 15:00:23

    Mi sono spiegato male, ripeto: io vorrei che quando si elimina il pulsante macro nr. 1 nella cella A1 o in una qualsiasi invece di vuota, a seguito dell'eliminazione del pulsante macro ci fosse il numero 1.



  • di totygno71 (utente non iscritto) data: 17/10/2013 18:51:15

    cit"io vorrei che quando si elimina il pulsante macro nr. 1
    come dovrebbe avenire questo passaggio? Tramite codice o sei tu che lo cancelli selezionandolo e poi pigiando il tasto canc?



  • di Alessio (utente non iscritto) data: 17/10/2013 20:45:56

    Nel caso venga eliminato, siccome questo file lo usiamo più di una persona.



  • di totygno71 (utente non iscritto) data: 18/10/2013 10:55:00

    prova questo accrocchio
     
    Option Explicit
    
    Sub Strana()
    Dim puzzante As Object
    On Error Resume Next
    Set puzzante = ActiveSheet.Shapes("CommandButton1")
             
    If puzzante Is Nothing Then
        [A1] = 1
    Else
        [A1] = 2
    End If
    
    End Sub
    



  • di Alessio (utente non iscritto) data: 18/10/2013 15:21:22

    La tua macro non l'ho ancora provata, il mio problema è questo: impedire di eliminare un pulsante macro senza proteggere il foglio, c'è? Ho fatto un file con 5 pulsanti macro associate ad una macro diversa. Uno di questi pulsanti all'apparenza sembra che non svolga nulla ma in realtà mi ottimizza il file. Però puntualmente i miei colleghi me lo eliminano ed io lo devo poi rimettere. Io vorrei impedire di eliminare il pulsante macro però senza proteggere il file. C'è qualche consiglio? Io avevo pensato che in caso di eliminazione del pulsante una cella da vuota diventasse piena e quindi associare la macro del pulsante eliminato a quell'evento. C'è qualcosa di più appropriato?



  • di totygno (utente non iscritto) data: 18/10/2013 17:47:13

    Ma scusa, perché nn associ alla macro una combinazione di tasti tipo ctrl+y?



  • di Alessio (utente non iscritto) data: 19/10/2013 07:26:29

    L'ho già associata, ma mica risolve il problema! Quella macro la devono usare anche gli altri ma siccome ogni tanto cambiano le persone che usano questo file c'è qualcuno che la elimina e quindi neanche gli altri la possono usare. La soluzione sicura è quella di proteggere il foglio di lavoro, a me però serve un alternativa. Come si fa a sapere qual'è il nome del pulsante macro? Io ne ho 5, qual'è il primo il secondo il terzo ecc?



  • di totygno71 (utente non iscritto) data: 19/10/2013 12:50:12

    Non capisco...
    ma eliminano il puslante o eliminano la macro (codice)?



  • di Alessio (utente non iscritto) data: 19/10/2013 12:52:44

    Eliminano solo il pulsante macro. Come si fa a sapere il nome del pulsante macro?



  • di totygno71 (utente non iscritto) data: 19/10/2013 13:10:06

    Apri le macro, seleziona quella che ti interessa poi premi opzioni e da qui puoi scegliere tu qale combinazne assegnare.
    Potresti anche proteggere il folgio , e quindi anche gli oggetti mettendo nel codice di ogni macro uno sprteggi all'inizio e un proteggi prima di uscire. cosi il foglio sarà sempre protetto e quindi non modificabile



  • di Alessio (utente non iscritto) data: 19/10/2013 13:16:24

    Lo so che proteggendo il foglio risolvo il problema, ma devo modificare molte cose. Mi sa che faccio così: metto una nota accanto a tutti i pulsanti macro dicendo di non eliminare il pulsante. Non è una cosa bella da vedere però risolve il problema, almeno spero! Aspetto un pò di tempo e vedo cosa succede! Non mi hai detto come si fa a sapere qual'è il pulsante 1, il 2 il 3 ecc.



  • di Alessio (utente non iscritto) data: 19/10/2013 15:33:39

    Ho provato il tuo codice ma non va, non è che gentilmente potresti allegare un esempio?



  • di Bruno (utente non iscritto) data: 19/10/2013 22:49:43

    Ciao Alessio
    Ti capisco... anch'io ho avuto il medesimo problema
    l'ho risolto cosi:

    in pratica ho creato una macro che mi ricostruisse i pulsanti.
    Ad ogni pulsante assegna la macro, sul pulsante ci scrive del testo, posiziona il pulsante sul foglio ecc... ecc...

    Questo codice è stato generato usando la registrazione automatica delle macro in excel 2010, quindi niente di speciale e molto elementare.

    Posiziona i pulsanti nel Foglio1 circa all'altezza delle righe 7, 8, 9
    dopo aver eseguito la macro clicca su ogni pulsante e vedrai eseguire le rispettive macro di esempio assegnate a ciascun pulsante.
    ...sti colleghi disordinati e poco attenti...


     
    Sub Macro1()
        Range("B5").Select
        ActiveCell.FormulaR1C1 = "MACRO1"
        Range("B5").Select
    End Sub
    
    
    Sub Macro2()
        Range("E5").Select
        ActiveCell.FormulaR1C1 = "MACRO2"
        Range("E5").Select
    End Sub
    
    
    Sub Macro3()
        Range("H5").Select
        ActiveCell.FormulaR1C1 = "MACRO3"
        Range("H5").Select
    End Sub
    
    
    Sub Macro4()
        Range("K5").Select
        ActiveCell.FormulaR1C1 = "MACRO4"
        Range("K5").Select
    End Sub
    
    
    Sub Macro5()
        Range("N5").Select
        ActiveCell.FormulaR1C1 = "MACRO5"
        Range("N5").Select
    End Sub
    
    
    
    
    
    
    Sub Macro6()  '  Genera i pulsanti
    
    '  GENERA PRIMO PULSANTE +++++++++++++++++++++++++++++++
    '
        ActiveSheet.Shapes.AddShape(msoShapeBevel, 42.75, 69, 56.25, 28.25).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "MACRO1"
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).ParagraphFormat
            .FirstLineIndent = 0
            .Alignment = msoAlignLeft
        End With
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorLight1
            .Fill.ForeColor.TintAndShade = 0
            .Fill.ForeColor.Brightness = 0
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 11
            .Name = "+mn-lt"
        End With
        Selection.ShapeRange.ScaleWidth 1.32, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 0.9090909091, msoFalse, msoScaleFromTopLeft
        Selection.OnAction = "Macro1"
        Range("B5").Select
    
    
    
    '  GENERA SECONDO PULSANTE +++++++++++++++++++++++++++++++
    '
        ActiveSheet.Shapes.AddShape(msoShapeBevel, 162.75, 69, 56.25, 29.25).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "MACRO2"
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
            ParagraphFormat
            .FirstLineIndent = 0
            .Alignment = msoAlignLeft
        End With
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorLight1
            .Fill.ForeColor.TintAndShade = 0
            .Fill.ForeColor.Brightness = 0
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 11
            .Name = "+mn-lt"
        End With
        Selection.ShapeRange.ScaleWidth 1.32, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 0.9090909091, msoFalse, msoScaleFromTopLeft
        Selection.OnAction = "Macro2"
        Range("E5").Select
    
    
    
    
    
    
    '  GENERA TERZO PULSANTE +++++++++++++++++++++++++++++++
    '
        ActiveSheet.Shapes.AddShape(msoShapeBevel, 280, 69, 56.25, 29.25).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "MACRO3"
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
            ParagraphFormat
            .FirstLineIndent = 0
            .Alignment = msoAlignLeft
        End With
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorLight1
            .Fill.ForeColor.TintAndShade = 0
            .Fill.ForeColor.Brightness = 0
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 11
            .Name = "+mn-lt"
        End With
        Selection.ShapeRange.ScaleWidth 1.32, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 0.9090909091, msoFalse, msoScaleFromTopLeft
        Selection.OnAction = "Macro3"
        Range("H5").Select
    
    
    
    
    
    
    '  GENERA QUARTO PULSANTE +++++++++++++++++++++++++++++++
    '
        ActiveSheet.Shapes.AddShape(msoShapeBevel, 400, 69, 56.25, 29.25).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "MACRO4"
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
            ParagraphFormat
            .FirstLineIndent = 0
            .Alignment = msoAlignLeft
        End With
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorLight1
            .Fill.ForeColor.TintAndShade = 0
            .Fill.ForeColor.Brightness = 0
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 11
            .Name = "+mn-lt"
        End With
        Selection.ShapeRange.ScaleWidth 1.32, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 0.9090909091, msoFalse, msoScaleFromTopLeft
        Selection.OnAction = "Macro4"
        Range("K5").Select
    
    
    
    
    
    
    '  GENERA QUINTO PULSANTE +++++++++++++++++++++++++++++++
    '
        ActiveSheet.Shapes.AddShape(msoShapeBevel, 530, 69, 56.25, 29.25).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "MACRO5"
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6). _
            ParagraphFormat
            .FirstLineIndent = 0
            .Alignment = msoAlignLeft
        End With
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 6).Font
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.ObjectThemeColor = msoThemeColorLight1
            .Fill.ForeColor.TintAndShade = 0
            .Fill.ForeColor.Brightness = 0
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 11
            .Name = "+mn-lt"
        End With
        Selection.ShapeRange.ScaleWidth 1.32, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 0.9090909091, msoFalse, msoScaleFromTopLeft
        Selection.OnAction = "Macro5"
        Range("N5").Select
    
    
    End Sub
    
    
    
    
    
    
    
    
    



  • di Alessio (utente non iscritto) data: 20/10/2013 15:59:21

    Grazie Bruno del codice ma nel mio caso è superfluo in quanto quando manca un pulsante io faccio copia e incolla di un altro pulsante e gli assegno la macro, è più sbrigativo. A me serve impedire di eliminare i pulsanti oppure in caso di eliminazione di uno che ad esempio la cella A1 da cella vuota diventerebbe piena.



  • di Vecchio Frac data: 21/10/2013 10:43:08

    Finalmente riesco a rifare il login :)
    E' concettualmente terribile consentire che l'utente sia messo in grado di ELIMINARE pulsanti che svolgono qualche funzione. Significa che esso può:
    - selezionare col destro il pulsante e comandare un "taglia" o un "elimina"
    - eliminare la colonna che contiene il pulsante.

    In ogni caso sono azioni criminali ;)
    Una soluzione da attuare è proteggere il foglio.
    Un'altra soluzione, senza mettere in piedi un meccanismo di ricostruzione dei pulsanti a runtime, è di intercettare l'evento Change sulla colonna che contiene il pulsante e in qualche modo impedirne l'esecuzione (con Undo per esempio).





  • di Alessio (utente non iscritto) data: 21/10/2013 11:01:19

    e come funzionerebbe questo evento change?



  • di Vecchio Frac data: 21/10/2013 11:32:23

    Bè non ho detto che sia semplice, ed è comunque un accrocchio anche questa soluzione.
    Funzionerebbe nel senso che devi intercettare il Change sul foglio, e io suggerisco ad esempio di verificare se si preme Canc o si elimina una colonna. E' una soluzione molto debole (basterebbe selezionare il range che contiene il pulsante per vanificare l'intento).
    Ti propongo un codice da studiare che verifica se nelle colonne (o nell'area) eliminata ricade il pulsante 1, e se sì annulla l'operazione.
    Questo codice ha l'effetto collaterale di annullare ogni operazione che ricada nelle celle sottostanti il pulsante 1. Ma bisogna accontentarsi ;)
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Not Intersect(Target, Range(ActiveSheet.Shapes(1).TopLeftCell.Address, _
        ActiveSheet.Shapes(1).BottomRightCell.Address)) Is Nothing Then
            Application.Undo
        End If
        Application.EnableEvents = True
    End Sub






  • di Alessio (utente non iscritto) data: 21/10/2013 11:41:05

    Non è quindi sicura al 100%. Ma c'è qualche codice nel caso in cui si elimini un pulsante una cella ad esempio A1 da vuota diventi piena?



  • di Vecchio Frac data: 21/10/2013 11:47:24

    La soluzione non è sicura al 100% ma è abbastanza efficace almeno per i casi in cui si eliminano le celle in cui risiede il pulsante da non cancellare.
    Nel blocco If puoi gestire questa situazione, dopo l'Undo che annulla la cancellazione.
    Quindi puoi inserire un'istruzione ad esempio "[A1] = 1", che inserisce un uno nella cella [A1] al verificarsi dell'evento di (tentativo di) eliminazione delle celle che contengono il pulsante 1.





  • di Alessio (utente non iscritto) data: 21/10/2013 11:49:45

    Quindi il nuovo codice sarà così?
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        If Not Intersect(Target, Range(ActiveSheet.Shapes(1).TopLeftCell.Address, _
        ActiveSheet.Shapes(1).BottomRightCell.Address)) Is Nothing Then
            Application.Undo
    [A1] = 1
        End If
        Application.EnableEvents = True
    End Sub



  • di Vecchio Frac data: 21/10/2013 11:54:34

    Sì, questo codice inserisce un "1" in cella A1 se si compie qualsiasi azione (evento _Change del foglio) che coinvolge la zona di celle su cui insiste il pulsante 1.
    Naturalmente il codice va posizionato nel foglio che contiene il pulsante 1 da proteggere :)





  • di Alessio (utente non iscritto) data: 21/10/2013 12:11:49

    ho appena provato il codice che fa questo: se scrivi qualcosa nel range dove c'è il pulsante in A1 mi esce in numero 1, però se elimino il pulsante non fa nulla. Allego il file di prova.



  • di Vecchio Frac data: 21/10/2013 12:14:18

    Uhm... come lo elimini il pulsante? cioè che azione fai? il codice *non* funziona se sul pulsante fai (in modalità progettazione) tasto destro - elimina (o taglia).





  • di Alessio (utente non iscritto) data: 21/10/2013 12:20:20

    Io facevo proprio quella cosa! Quindi com'è che dovrebbe funzionare?



  • di totygno71 data: 21/10/2013 13:05:27

    Spesso la cosa più complicata è capire cosa si vuole ottenere entrando nella testa degli altri ^_^



  • di Alessio (utente non iscritto) data: 21/10/2013 13:24:32

    Bentornato Totygno. Non è che gentilemnte potresti allegare un esempio con la tua macro Sub Strana()?



  • di Vecchio Frac data: 21/10/2013 13:45:36

    cit. "Io facevo proprio quella cosa! "
    ---> uhm allora la vedo difficile :)
    Non credo che esista un evento "OnDestroy" o "OnDelete".
    Potresti cavartela con un timer che ogni secondo controlla se esiste il pulsante, richiamando magari la sub Strana() di totygno che una volta ogni tanto la imbrocca pure ^_^





  • di Alessio (utente non iscritto) data: 21/10/2013 13:56:53

    Totygno è unico, mi ha fatto molto ridere la sua macro



  • di totygno71 (utente non iscritto) data: 21/10/2013 14:16:14

    cit"Bentornato Totygno. Non è che gentilemnte potresti allegare un esempio con la tua macro Sub Strana()?
    Ma non l'hai neanche provata???



  • di Alessio (utente non iscritto) data: 21/10/2013 14:17:58

    L'ho provata e non va, sicuramente avrò sbagliato qualcosa........



  • di totygno71 (utente non iscritto) data: 21/10/2013 14:30:53

    Prova il file
    pigiando il pulsantino giallo se c'è il commandbutton1 in A1 avrai il valore 2 altrimenti in A1 troverai il valore 1_

    Puoi collegre questa macro ovviamente a qualcosa di diverso del pulsantone giallo...
    Ciao



  • di Alessio (utente non iscritto) data: 21/10/2013 14:46:14

    Ma il pulsante CommandButton1 come si fa ad eliminare? Ma è bloccato?



  • di totygno71 (utente non iscritto) data: 21/10/2013 14:51:24

    Ma come è sta storia??? I tuoi colleghi riescono a eliminarlo e tu no? ^_^



  • di Alessio (utente non iscritto) data: 21/10/2013 15:07:32

    I miei colleghi riescono ad eliminare il mio! Io però l'ho inserito in questo modo: Inserisci > Forme > Diagrammi di flusso, è il rettangolo che è il rpimo oggetto. Ne ho inseriti 5 associando ad ognuno una macro. Tu quel pulsante come lo hai fatto ad inserire?



  • di totygno71 (utente non iscritto) data: 21/10/2013 15:13:31

    Visualizza- barra degli strumenti-strumenti di controllo.
    da qui scegli pulsante e disegnalo sul foglio!



  • di Alessio (utente non iscritto) data: 21/10/2013 15:21:38

    Io ho Excel 2010 e dopo visualizza strumenti di controllo non lo trovo, dove sta? Allego immagine. Perchè il tuo pulsante non riesco ad eliminarlo? Come si fa?



  • di totygno71 (utente non iscritto) data: 21/10/2013 15:25:01

    Mijjj ragazzo mio...

    Menus e poi tutto il resto..



  • di Alessio (utente non iscritto) data: 21/10/2013 15:35:46

    Non è dove dici tu ma in Sviluppo > Inserisci > pulsante. Quello che ho creato io ora facendo così si elimina mentre il tuo no, come mai?



  • di Alessio (utente non iscritto) data: 21/10/2013 15:40:32

    Allego il file dove si evince che il pulsante mio si elimina mentre quello tuo no.



  • di Vecchio Frac data: 21/10/2013 16:08:07

    Totygno si riferisce a un pulsante di tipo "Controllo ActiveX".
    Alessio si riferisce a un pulsante di tipo "Controllo modulo".
    Le differenze ci sono ma non voglio imbarcarmi in spiegazioni troppo tecniche da cui non so se riesco a uscirne vivo :)
    Il problema di Alessio è quello di intercettare la cancellazione accidentale di tale controllo modulo.
    Con un timer si può controllare periodicamente l'esistenza in vita di questo controllo e intervenire di conseguenza.
    Sto controllando se per sbaglio o per accidente esiste un evento che ci consenta di intercettare l'eliminazione dal foglio di un controllo di tale tipo.





  • di Alessio (utente non iscritto) data: 21/10/2013 16:20:58

    Ma se i pulsanti di tipo "Controllo ActiveX" non si possono eliminare a questo punto potrei inserire quelli ed associare le macro! Da dove si inseriscono?



  • di Bruno (utente non iscritto) data: 21/10/2013 16:52:36

    Questa cosa dell'eliminazione di uno o più pulsanti mi ha incuriosito, quando capitò a me non mi posi molti problemi, li ricostruii con le macro.
    La macro mi permette di ricostruire i pulsanti, di rimetterli nella medesima posizione e di far loro eseguire le procedure originali.
    il tutto con un click. Molto pratico

    Dicevo che mi ha incuriosito..
    Al momento non ho sottomano il PC con Excel 2010 ed ho provato con Excel 2003
    E sono riuscito a rendere disponibile il foglio (credo per ogni uso) e
    impedire la selezione del pulsante con il tasto dx mouse.

    Ho messo sul foglio la forma (non quello che si mette nei form) che fungerà da pulsante
    Gli ho assegnato la macro

    Ho cliccato con il pulsante dx del mouse sul quadratino in alto a sx del foglio,
    quello fra la A e l' 1.
    In questo modo si evidenziano tutte le celle del foglio e contestualmente si apre il menù a tendina.

    Scelgo la voce Formato celle
    Poi la cartellina Protezione
    Tolgo la spunta a Bloccata e Nascosta
    Menu strumenti Protezione -> Proteggi foglio
    metto la spunta a 14 voci su 15 lascio vuota la penultima (Modifica oggetti)
    Digito la Password, la ridigito e confermo con OK
    quindi salvo il file

    Ora il pulsante accetta la pressione del tasto sx per l'esecuzione della macro ma non quella del dx

    In excel2003 è così, penso che nella versione 2010 non sarà molto diversa.
    Prova, può essere che risolvi.
    Bruno



  • di Alessio (utente non iscritto) data: 21/10/2013 17:46:24

    Lo so che proteggendo il foglio si risolve il problema, ma quella è l'ultima ipotesi che voglio. Io sto cercando un alternativa valida!



  • di Vecchio Frac data: 22/10/2013 10:14:38

    cit. "Da dove si inseriscono?"
    ---> In Excel >= 2007, dalla scheda Sviluppo, pulsante Inserisci. Lì trovi tutti i tipi di controllo disponibili.

    cit. "Io sto cercando un'alternativa valida!"
    ---> La mia alternativa, suggerendo una verifica temporizzata con OnTime della presenza o meno del pulsante, te l'ho data. A mia scienza, non esistono eventi in caso di eliminazione di controlli dal foglio.
    Come seconda alternativa, non utilizzare controlli posti sul foglio ma costruisci uno Userform che esponga l'interfaccia desiderata. In questo modo è impossibile all'utente eliminare i controlli.
    Altra alternativa possible, buttare Excel e utilizzare Access :)





  • di Alessio (utente non iscritto) data: 22/10/2013 10:26:23

    Ok, per adesso lacio la nota accanto ai pulsanti dicendo di non eliminarmi, se va tutto bene ok altrimenti proteggerò il foglio di lavoro. Grazie tante per la pazienza



  • di Vecchio Frac data: 22/10/2013 10:42:42

    Vedi che però l'idea dell'userform non è male... ti risparmieresti un sacco di problemi (ho capito che hai colleghi molto distratti ^_^)





  • di Alessio (utente non iscritto) data: 22/10/2013 12:14:19

    Più che distratti sono un pò allergici a excel! Io qualcosa in più la riesco a fare, fare quello che dici tu con l'userform sinceramente non riesco e non so se ne valga la pena. Ormai ho optato per l'eventuale protezione dl foglio che risolve al 100% il problema. Grazie ancora



  • di Vecchio Frac data: 22/10/2013 13:35:58

    cit. "che risolve al 100% il problema"
    ---> LOL, mai essere così categorici... passami il foglio protetto e vedi come te lo restituisco ^_^

    Scherzi a parte, peccato che devi adattarti a un'idea che non ti piaceva molto.
    Creare uno userform e farlo funzionare come si deve è operazione quanto mai accessibile anche con poche (non nulle!) conoscenze.





  • di Alessio (utente non iscritto) data: 22/10/2013 13:42:59

    Per sproteggere il foglio serve un programma idoneo giusto? Come ho detto in precedenza non ho la più pallida idea di questa userform......se mi alleghi un filetto



  • di Vecchio Frac data: 22/10/2013 15:12:11

    cit. "serve un programma idoneo giusto"
    ---> Ma anche no... bastano poche linee di codice ^_^

    cit. "non ho la più pallida idea di questa userform"
    ---> vai nell'editor di codice, menu inserisci, userform e poi comincia a pasticciare ^_^





  • di Alessio (utente non iscritto) data: 22/10/2013 15:16:59

    Se si tratta di pasticciare allora posso chiamare i miei colleghi che sono ingambissima a fare questo Non è che puoi gentilmente inserire quei righi di codice di cui hai accennato? Grazie



  • di Vecchio Frac data: 22/10/2013 15:20:39

    Per sproteggere un file?

     
    Sub Sproteggi()
    'sites.google.com/site/e90e50/random-topics/rimuoverepasswordexcel
    'rimuove password del foglio attivo impostata da:
    'Strumenti>Protezione>Proteggi foglio ... password
    'per rimuovere quella della cartella attiva impostata da:
    'Strumenti>Protezione>Proteggi cartella di lavoro ... password
    'sostituire ActiveSheet con ActiveWorkbook
    Dim i As Long, l As Long
    Dim x As Long, y As Double, z As Long
    Dim a(65536) As Double
    On Error Resume Next
    For l = 0 To 15
        i = 2 ^ l - 1: y = 10 ^ l
        For x = 0 To i
            z = z + 1: a(z) = a(x) + y
            ActiveSheet.Unprotect CDec(a(z))
            If Err Then
                Err.Clear
            Else
                MsgBox "Password usata: " & CDec(a(z))
                Exit Sub
            End If
        Next
    Next
    End Sub






  • di Alessio (utente non iscritto) data: 22/10/2013 15:30:16

    Non so come ringraziarti del codice! Tradotto in italiano che vuol dire? Sono curioso



  • di Vecchio Frac data: 22/10/2013 15:36:43







  • di Alessio (utente non iscritto) data: 22/10/2013 15:39:36

    Non ho capito l'ultima parola



  • di Alessio (utente non iscritto) data: 22/10/2013 15:40:41

    Ma e funziona per tutti gli excel?



  • di Vecchio Frac data: 22/10/2013 15:52:40

    Sicuramente fino alla versione 2010. Poi non so ^_^ non credo che Microsoft abbia implementato un metodo migliore per la semplice protezione di un foglio.
    Comunque come vedrai non ritroverai la password originale in chiaro, ma bensì una che, per la combinazione dei bit di cui è composta, riesce a decrittare il foglio protetto nello stesso modo della password originale.
    Per una password memorizzata ci sono molte stringhe diverse che sono password valide, se vuoi proteggere il tuo lavoro non ti devi affidare a Excel :)

    btw: questo codice di esempio serve solo per mostrare la risibilità con cui può essere bypassata la protezione di un foglio e deve essere inteso come un esempio didattico.





  • di Alessio (utente non iscritto) data: 22/10/2013 16:20:25

    Lo so che è per scopo didattico. Quindi per quanto riguarda la passowrd non la elimina? Non sto capendo la funzione precisa. Per quella famosa useform che famo?



  • di Vecchio Frac data: 22/10/2013 16:26:48

    Certo che la elimina, ma non te la svela.
    Per quella famosa userform, famo che se sei in grado di crearla, sei in grado di mantenerla, adattarla, modificarla per le tue esigenze attuali e quelle future, altrimenti lascia perdere per ora, cerca di capire come funziona e poi riprendi in mano il progetto successivamente, con questa alternativa.





  • di Alessio (utente non iscritto) data: 22/10/2013 16:57:30

    Ok. Grazie ancora e tante belle cose