Variabili pubbliche



  • Variabili pubbliche
    di beppexile data: 22/09/2016 14:00:26

    Salve ragazzi, sto cercando di imparare bene le variabili pubbliche, ed ho un dubbio.

    Se il valore di una cella lo associo ad una variabile pubblica con il codice in basso, varProva assumerà il valore della cella e sarà letta da tutte le runtime del progetto.
    Ora, se durante il lavoro, il valore della cella dovesse variare, come faccio a far variare anche il valore di varProva?

    Richiamandola ogni volta che cambia il valore della cella con:

    varProva= Worksheets(1).Range("A1").Value

    oppure esiste un'altro metodo?

    Grazie a tutti
     
    Public varProva as Variant
    
    Private Sub Workbook_Open()
        varProva = Worksheets(1).Range("A1").Value
    End If



  • di beppexile data: 22/09/2016 14:01:50

    Pensavo fra me e me, magari è possibile sfruttare un qualche evento del foglio 1 per far variare varProva automaticamente?



  • di scossa data: 22/09/2016 15:24:42

    Ciao,

    premesso che le variabili pubbliche devi dichiararle in un modulo standard e non nel modulo di classe della cartella di lavoro, per fare quello che chiedi la tua variabile deve essere un'istanza della cella A1, quindi in un modulo standard:


    Public varProva as Range


    mentre nel modulo di classe di ThisWorkbook:

    Private Sub Workbook_Open()
    set varProva = Worksheets(1).Range("A1")
    End Sub

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    set varProva = Nothing
    End Sub


    In questo modo avrai accesso a tutte le proprietà e metodi della cella A1, quindi se nel uo codice scrivessi
    varProva = 10

    modificheresti subito il valore della cella A1.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di patel data: 22/09/2016 15:26:06

    è inutile utilizzare la Workbook_Open ed è inutile utilizzare una variabile pubblica, basta usare il contenuto della cella senza utilizzare variabili





  • di beppexile data: 22/09/2016 15:43:37

    Grazie

    Ma come dici tu patel, se dovessi richiamare il valore della cella, dovrei ogni volta utilizzare:

    Worksheets(1).Range("A1").Value

    invece, dichiarandolo alla variabile varProva, lo richiamerei subito con:

    varProva

    risparmiando caratteri, quindi spazio (può essere anche che mi sbaglio) ma con le variabili dichiarate al punto giusto è tutto più pulito.

    Per quanto riguarda quello che dice scossa: sì, la variabile l'ho dichiarata su un modulo standard.
    La mia perplessità era su come variare il valore della cella automaticamente, e francamente non avevo pensato di far la prova al contrario, cioè dando il valore direttamente alla variabile.

    Grazie a tutti e 2 per l'intervento, credo di aver risolto.

    P.S.: non avevo mai pensato di utilizzare le variabili pubbliche (anche perchè i miei erano piccoli file), e nel mio progetto (che è bello grosso) si richiamano molte volte le stesse variabile quasi ad ogni runtime; così facendo evito un sacco di Dim per le stesse variabili e riferimenti al foglio, caricandole una volta sola all'avvio, e modificandole sul momento.



  • di beppexile data: 22/09/2016 15:52:32

    Non è possibile dichiarare più variabili Range tutte nella stessa riga, come per le Variant?
    Mi prende solo l'ultima dichiarata...
     
    Public var1, var2, var3 as Range
    Public num1, num2, num3 as Variant



  • di scossa data: 22/09/2016 16:26:49

    cit.: "Non è possibile dichiarare più variabili Range tutte nella stessa riga, come per le Variant? "

    in VBA le varaibili, su un'unica riga, vanno dichiarate specificandone il tipo esplicitamente:
    Public var1 as Range, var2 as Range, var3 as Range

    vale per tutte le variabili e per tutti i tipi, altrimenti per default viene dichiarata come Variant

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di beppexile data: 23/09/2016 10:29:05

    cit:. altrimenti per default viene dichiarata come Variant

    Ecco perchè le Variant mi funzionavano!

    Grazie

    Un'ultimo chiarimento... perché si usa Set?



  • di scossa data: 23/09/2016 14:05:43

    cit.: "Un'ultimo chiarimento... perché si usa Set?"

    Perché non devi semplicemente assegnare un valore ad una variabile, ma devi creare un'istanza di quell'oggetto e per fare questo si usa l'istruzione Set.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di beppexile data: 23/09/2016 16:23:50

    Comunque, devo trovare una buona guida per colmare alcune lacune basilari.
    Grazie per le delucidazioni.