Visibilità Variabili



  • Visibilità Variabili
    di Pitagora (utente non iscritto) data: 26/09/2013 18:30:16

    Salve...
    Il mio quesito è il seguente...
    Ho un file excel con 5 fogli
    utilizzo un modulo con all'interno 5 sub
    in ogni sub dimensiono e dichiaro i 5 fogli, 5 range e 5 varibili (integer)_ sempre uguali_
    Domanda:
    è possibile dichiarare il tutto una sola volta all'inizio del modulo anzichè dichiararle in ogni sub???
    se si, come si fà e che logica ci deve essere alla base???
    Grazie a qualsivoglia risposta_



  • di Vecchio Frac data: 26/09/2013 18:46:15

    Dunque tu vuoi variabili globali a livello di modulo.
    In un modulo vuoto, dopo Option Explicit puoi dichiarare Public qualsiasi variabile ed essa sarà visibile all'intero progetto (file) Excel, fogli compresi. Se le variabili devono essere note solo alle routine scritte nel modulo, dichiarale Private (i fogli non le conosceranno, e nemmeno altri moduli).
    Attento comunque alle variabili globali, il loro uso è generalmente sconsigliato perchè se inavvertitamente modifichi una variabile condivisa puoi avere effetti collaterali (non di sintassi ma di logica di funzionamento). E rintracciare gli errori di logica è sempre difficile :)

    E' lo stesso ragionamento su Const che ho fatto ieri in un'altra discussione.
    Non mi è chiaro solo perchè devi dimensionare e dichiarare 5 fogli, ma non vedendo il contesto non posso dirti che è sbagliato o superfluo :)





  • di Pitagora (utente non iscritto) data: 26/09/2013 19:04:26

    Forse mi sono spegato male... anzi sicuramente...
    esempio:
    dim sh1 as worksheet, sh2 as worksheets etc... fino a 5
    poi
    set sh1 = worksheets("Foglio1")
    set sh2 = worksheets("Foglio2")
    etc... fino a 5

    stessa cosa per i 5 range
    dim rng1 as range, rng2 as range etc... fino a 5
    poi
    set rng1 = sh1.Rnage("A1:A10")
    set rng2 = sh2.Rnage("A1:A10")
    etc
    stessa cosa per le varibili intere
    tutto questo popò di pappardella devo ripeterla in ogni sub del modulo oppure basta definirla una sola volta all'inizio del modulo???, se basta una sola volta come si la si deve scrivere perchè sia efficace e con che logica??

    Grazie per le indicazioni!





  • di Vecchio Frac data: 26/09/2013 20:24:14

    Una cosa è la creazione delle variabili.
    Altra cosa è l'assegnamento di un valore: quello devi farlo in ogni contesto ti sia necessario.
    Se l'assegnamento è una volta per tutte, allora puoi usare costanti, che però con oggetti come i fogli diventa problematico.
     
    'Gli oggetti come fogli, range ecc. hanno bisogno di un po' di codice in più.
    'in un modulo dichiaro sh come oggetto
    Public sh1 as Object, rnh1 as Object
    
    'nel codice di Thisworkbook all'apertura assegno il valore
    Private Sub Workbook_Open()
        Set sh1 = Worksheets("foglio1")
        Set rng1 = Worksheets("foglio1").range("A1:A10") 
    End Sub
    
    'nel codice di foglio accedo alla variabile istanziata
    Sub test()
        MsgBox sh1.Name
        rng1.select
    End Sub
    
    
    
    'per le altre variabili di tipo builtin è più semplice. 
    'Basta dichiararle Public in un modulo e valgono per l'intero progetto
    Public pippo as integer, topolino as string
    






  • di Pitagora (utente non iscritto) data: 26/09/2013 20:46:31

    Grazie VF