Ciclo per bottoni in userfom



  • Ciclo per bottoni in userfom
    di totygno71 data: 18/05/2013 13:24:10

    Buongiorno communità ^_^

    come si puo creare un ciclo che standardizzi l'azione di tutti i bottoni contenuti in una userform?

    In particolare tutti devono fare la stessa cosa...:

    quando premuti devono scrivere nella cella attiva il valore della rispettiva caption

    Accetto ogni proposta.... anche indecente :P



  • di Vecchio Frac data: 18/05/2013 14:07:49

    C'è ben poco da fare, non esiste in VBA (una delle lacune più grandi che ho trovato) il concetto di matrice di controlli. Ma si può aggirare (è una funzionalità per la quale molte volte ho promesso un tutorial, non sono mai riuscito a farlo).
    In pratica in VBA manca nativamente il fatto di poter assegnare ad un insieme omogeneo di controlli lo stesso evento (click, enter, change, ecc.).
    La cosa si risolve con la creazione di un classe, di eventi di oggetto, parecchio codice a supporto e un certo sforzo intellettivo per capire il meccanismo.
    Sbrigativamente invece, una soluzione banale è replicare per tutti i controlli interessati (commandbutton) il codice che sarà identico in tutti i casi. Horribile visu, ma non ci sono altre soluzioni :)
    Diverso il discorso per i controlli posizionati direttamente sul foglio: in tal caso come hai visto ieri si può creare un'unica sub e assegnare quella a tutti i controlli interessati. Differenziando opportunamente il comportamento sfruttando l'oggetto Application.Caller ceh restituisce un riferimento al controllo che ha scatenato l'evento.





  • di ISY data: 18/05/2013 14:14:21

    Ciao

    cit: C'è ben poco da fare, non esiste in VBA

    Allego un esempio che avevo trovato in rete...

    VF Se mi potete spiegare come opera



  • di Vecchio Frac data: 18/05/2013 14:28:14

    Ciao isy, bentrovato,
    hai postato esattamente l'idea della matrice di controlli (array di controlli).
    E' da molto tempo che vorrei fare un articoletto per spiegarne il funzionamento... Non è facile in poche righe.
    In pratica si crea una classe di controlli dichiarata WithEvents per rispondere agli eventi di oggetto.
    Poi si crea una Collection o un semplice Array comprendente i controlli che devono rispondere al medesimo evento.
    Quindi si scrive l'evento che verrà richiamato da ogni componente dell'array ogni volta che viene interessato dall'evento.
    Ci sono varianti più o meno carine, più o meno estese (quella che hai postato è una delle più semplici).
    Purtroppo non tutti gli eventi possono essere gestiti così (in fondo si tratta di maneggiare Array, non veri controlli).
    Ma per la maggior parte degli scopi è più che sufficiente.

    Se totygno vuol cimentarsi a replicare l'esempio per i suoi scopi, sarà un lavoro davvero ben fatto ^_^

    (p.s.
    @isy: non serve che ti rivolgi a me dandomi del "voi" ^_^
    e se posso chiederti la cortesia di contattarmi: staff@excelvba.it)





  • di totygno71 data: 18/05/2013 19:16:52

    @VF

    Vi ringrazio della solerte spiegazione... in effetti ero a conoscenza di questa problematica ma contavo sulla vostra esperienza nella soluzione di questo annoso problema.... Vi ringrazio comunque... e vi saluto...
    Visto che utilizzo alcune form con molti bottoni forse mi cimenterò come voi mi avete suggerito...

    @ Isy a te do del tu... ciao... e grazie per l'intervento...

    Alla prossima questione... con riguardo... Totygno71 ^_^