Nascondi pulsanti



  • Nascondi pulsanti
    di Kaos (utente non iscritto) data: 26/06/2017 13:25:45

    Salve volevo sapere se un foglio excel ho 15 pulsanti, è possibile ragrupparli, oppure usare un altro sistema, per nasconderli tutti insieme con il vba senza fare l'operazione uno per uno, oppure spostarli in un punto x del foglio sempre tutti insieme.



  • di Vecchio Frac data: 26/06/2017 14:11:59

    Se i pulsanti sono gli unici controlli (o forme) presenti sul foglio, è semplice raggrupparli tutti insieme e poi spostarli: un foglio espone il metodo .Shapes che contiene tutte le forme sul foglio. L'insieme .Shapes poi espone il metodo .SelectAll con cui puoi selezionare l'intero corpo di controlli.
    Se invece ci sono altre forme sul foglio e vuoi selezionare solo quelle di tipo "pulsante" dovrai controllarne il .Type o il .Name (meglio se hanno tutti lo stesso nome con un indice ad esempio Button1, Button2, ecc).





  • di Kaos (utente non iscritto) data: 26/06/2017 17:21:32

    grazie Vecchio Frac per aver risposto, per spostare l'insieme di Shapes ci sono riuscito, il problema sorge se decido di rendere gli Shapes invisibile quando provo a renderli visibile mi da errore.
    Allego il pezzetto di codice con il registratore di macro per nascondere e visualizzare le Shapes.
    Quando provo a renderli visibile da errore
    Errore di run-time '-2147024809(80070057)':
    Non è consentito selezionare le forme richieste.

     
    Sub MacroVisibleFalse()
        ActiveSheet.Shapes.Range(Array("Gruppo 1")).Select
        ActiveSheet.Shapes.Range(Array("Gruppo 1")).Visible = False
    End Sub
    
    Sub MacroVisibleTrue()
        ActiveSheet.Shapes.Range(Array("Gruppo 1")).Select
        ActiveSheet.Shapes.Range(Array("Gruppo 1")).Visible = True
    End Sub



  • di alfrimpa data: 26/06/2017 17:49:43

    Kaos prova con il codice qui sotto.

    Alfredo
     
    Sub MacroVisibleTrue()
    Dim sh as Shape
    For Each sh in ActiveSheet.Shapes
         sh.Visible = True
    Next sh
    End Sub






  • di kaos (utente non iscritto) data: 27/06/2017 10:35:17

    cia alfrimpa così funziona. Volevo chiedere se voglio fare piu ragruppamenti, è possibile rare un nome nella fase di raggruppanento Tipo
    Shapes.Range(Array("Gruppo 1"))
    Shapes.Range(Array("Gruppo 2"))
    il primo gruppo è stato ottenuto con il registratore di macro attivo mentre raggruppavo i pulsanti.
    E' possibile ottenere lo stesso risultato senza usare il registratore di macro?
    E atottare il codice per rendere visibile il gruppo1 o gruppo 2



  • di Vecchio Frac data: 27/06/2017 10:48:17

    Devi conoscere i nomi degli oggetti interessati.
    Poi puoi applicare un'istruzione del genere:
    set v = activesheet.shapes.range(array("Pulsante 1", "Pulsante 2", "Pulsante 3"))

    Che raggruppa i pulsanti come denominati e li assegna alla variabile (di tipo Variant) "v".
    Che puoi trattare come vuoi (spostare, nascondere, ecc.), per esempio v.visible=true





  • di alfrimpa data: 27/06/2017 14:22:29

    Un'altra ipotesi potrebbe essere quella del codice qui sotto.

    Supponendo di nominare le forme: 1Gruppo, 2Gruppo, 3Gruppo etc. la macro seguente nasconde tutte le forme appartenenti al secondo gruppo (2Gruppo).

    Alfredo
     
    Sub prova()
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        If Left(sh.Name, 1) = "2" Then
            sh.Visible = False
        End If
    Next sh
    End Sub
    






  • di Kaos (utente non iscritto) data: 27/06/2017 20:51:02

    un grazie per aver risposto al mio quesito, mi rimane un punto oscuro, faccio un esempio supponiamo che su un foglio di calcolo ho 20 pulsanti con nome significativi tipo Apri, Chiudi, Salva, Nuovo foglio ecc. ora suppiniamo che io raggruppi 10 pulsante a caso lasciando il reristratore di macro attivo alla fine chiudo il registratore di macro, cerco la macro e miritrovo il nome dei pulsanti raggruppati e mi ritrovo il seguente nome ActiveSheet.Shapes("Group 1458").Select
    ora volevo sapere è possibile cambiare questo none assegnato dal registratore macro con un nome piu significativo tipo ("Operatore 1").



  • di alfrimpa data: 27/06/2017 21:17:52

    Scusa Kaos perchè non alleghi un file che riproduca la situazione e su questa spiegare quello che vuoi fare così sarebbe più facile dare risposte mirate.

    Alfredo





  • di Vecchio Frac data: 27/06/2017 21:45:11

    cit. " questo none assegnato dal registratore macro"
    ---> Il registratore di macro non assegna niente, legge solo il nome già assegnato all'oggetto in fase di creazione o rinominato poi in altro modo.
    Comunque segui pure il consiglio di Alfri che è sempre la cosa migliore :)





  • di kaos (utente non iscritto) data: 28/06/2017 20:51:47

    Facendo prove ci sono riuscito a raggruppare i pulsanti ecco il codice che ho usato.
    Riguardo a quanto diceva Vecchio Frac che il registratore di macro non assegna nulla, io ho notato che se dopo aver raggruttoto i pulsanti, in modalita struttura registro una nuova macro e ci clikko sopra i pulsanti raggruppati in precedenza il registratore assegna un nome tipo ActiveSheet.Shapes("Group 25").Select
    molto piu veloce del metodo sotto per assegnare un nome al gruppo di pulsanti.
     
    Sub Ragruppa()
    ActiveSheet.Shapes.Range(Array("CommandButton16", "CommandButton17", "CommandButton2", "CommandButton1")).Select
    Selection.ShapeRange.Group.Select
    End Sub



  • di Vecchio Frac data: 28/06/2017 22:22:21

    Non è il registratore di macro ad assegnare un nome agli oggetti, ma Excel, e il registratore ne prende solo atto.
    Comunque il punto è se hai raggiunto o no l'obiettivo :)





  • di Kaos (utente non iscritto) data: 28/06/2017 22:27:59

    Si con il vostro prezioso aiuto ho raggiunto l'obietto.
    Grazie



  • di Kaos (utente non iscritto) data: 28/06/2017 22:28:49

    risolto