Stessa variabile per più macro



  • Stessa variabile per più macro
    di Mangusta (utente non iscritto) data: 01/03/2013 14:47:06

    Ciao ragazzi sto buttando giù una bozza di codice che molto probabilmente sarà modificato e ottimizzato.
    Fino ad allora volevo sapere se fosse possibile che la variabile che si valorizza tramite un inputbox possa essere utilizzata per più SUB
    (ho più sub una sotto l'altra che utilizzano stessa variabile e mi scoccia chiedere più volte stessa cosa)



  • di Vecchio Frac data: 01/03/2013 15:12:00

    Dichiara la variabile pubblica in un modulo e sarà visibile a tutto il progetto.

    Public var As String

    Considera anche che ogni singola cella di Excel può fungere da variabile pubblica, e basta usare la semplice notazione a quadre per avere ogni valore a disposizione.

    [AA1] = "un testo qualunque"





  • di Mangusta (utente non iscritto) data: 01/03/2013 20:49:26

    Ho provato ma non ci sono riuscito probabilmente non ho capito:

    nel modulo di chiaro:
    Public x As String

    poi all'interno della mia macro
    x = Trim(Application.InputBox("Inserisci il numero della settimana:", Type:=2))

    If x = "Falso" Or x = "" Then Exit Sub

    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks.Open(wk1.Path & "/" & x & "settimana.xls")

    il senso è avere una unica x che vasa a completare il nome del file "settimana.xls"

    se x =1 il nome file diventa 1settimana.xls





  • di Vecchio Frac data: 02/03/2013 09:10:00

    Se sei in Windows, io userei preferibilmente il separatore per il path:
    Set wk2 = Workbooks.Open(wk1.Path & "" & x & "settimana.xls")
    ma non è quello il problema (viene riconosciuto ugualmente).
    Ho eseguito un rapido test e funziona regolarmente, si apre un file chiamato "1settimana.xls" nel percorso definito dal primo Workbook.
    Ricevi qualche errore? quale?
    o non succede niente?
    hai qualche On Error che nasconde gli errori?
    e il file da aprire si trova nel path specificato?





  • di Mangusta (utente non iscritto) data: 02/03/2013 09:37:09

    Spiegato male io! sulla prima macro funziona! sulla seconda : basta non cè bisogno id inserire di nuovo inputbox visto che il valore non cambia ma basta

    Set wk2 = Workbooks.Open(wk1.Path & "" & x & "mese.xls")

    (varia nome mese e settimana ma numero antecedente indicato dalla x è uguale)



  • di Vecchio Frac data: 02/03/2013 09:45:06

    certamente, essendo "x" dichiarata globale a livello di modulo conserva il suo valore e puoi modificarlo in qualsiasi punto del programma (ecco perchè le variabili globali sono pericolose e poco raccomandate... basta una distrazione e ti modifichi un valore condiviso solo per un errore di battitura).
    ...e adesso quindi funziona? ^_^





  • di Mangusta (utente non iscritto) data: 02/03/2013 15:44:48

    Proprio non riesco!! mi allegeresti un filetto di esempio che guardo dove sbalgio per favore



  • di Vecchio Frac data: 02/03/2013 19:23:36

    Ti allego un banalissimo progettino.
    Naturalmente il file 1settimana.xls o che cominci con qualsiasi altro numero che tu imposti nell'input iniziale, deve esistere nello stesso percorso dove lanci questo file di test.





  • di Mangusta (utente non iscritto) data: 03/03/2013 20:50:31

    Risolto!!! dopo aver dichiarato la variabile pubblica mi ero dimenticato (non ci avevo pensato ) di togliere per ciascuna macro la dichiarazione della stessa variabile
    (dim x as string nelle macro andava tolta)



  • di Vecchio Frac data: 03/03/2013 22:15:56

    Ehm... a me non è venuto in mente di avvisarti che le variabili locali hanno la precedenza su quelle globali... è questione di scope o visibilità, tanto chiara in altri linguaggi e purtroppo più oscura in quelli VB*.
    L'hai imparato a tue spese e... non lo dimenticherai più ^_^