LoginRegistrati
Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #26075 Risposta

    Giulio
    Partecipante

      Buongiorno a tutti, la mia domanda più che tecnica è un consiglio su come gestire la progettazione software VBA.

      Ho un programma piuttosto complesso basato su diverse interfacce userform e vari moduli in cui sono raggruppate varie funzioni. Le variabili principali del progetto ho scelto di dichiararle come pubbliche proprio perchè utilizzate in diversi moduli e diverse userform. Ho implementato quindi una serie di funzioni che associano le variabili pubbliche ai controlli delle userform, e saranno poi utilizzate all'interno dei vari moduli del programma per processare le varie funzioni.

      Ora, il problema nasce perchè mi è stato chiesto di implementare ad un certo punto dell'interfaccia utente un bivio, ovvero una scelta che può dirottare su un certo gruppo di userform, oppure su un altro (ma all'interno dello stesso progetto). Ovviamente, le variabili richieste per gestire il secondo gruppo di userform sono diverse da quelle del primo. Il risultato è che utilizzando il sistema di variabili pubbliche che ho citato, avrò che in base alla scelta dell'utente ci saranno un gruppo di variabili pubbliche dichiarate ma non utilizzate, e questa cosa credo sia abbastanza "brutta" da un punto di vista informatico. Il problema però è che non saprei che altro sistema utilizzare, perchè dichiarare le variabili come private all'interno di un modulo (o di una userform) comporterebbe che debba poi riempire di argomenti tutte le funzioni degli altri moduli (e sono tante, e sfruttano peraltro quasi sempre le stesse variabili). Voi come gestite la dichiarazione delle variabili in progetti complessi? Non c'è un modo per generare delle variabili pubbliche sono se si verificano certe condizioni?

      Grazie in anticipo a tutti

      #26078 Risposta
      Lucastar
      Lucastar
      Partecipante
        4 pts

        Non sono esperto di VBA, ma credo che non sia un grosso problema dichiarare variabili e poi non utilizzarle, a meno di allocare spazio in memoria e lasciarlo inutilizzato (ma i PC moderni non hanno questo tipo di problema)

        al limite puoi pensare di fare una sub specifica per la dichiarazioni delle variabili che ti servono in funzione del "bivio"

        e quindi richiamarla al bisogno.

        #26079 Risposta

        Giulio
        Partecipante

          Grazie Lucastar per il tuo parere; purtroppo ho fatto un tentativo ma non è possibile dichiarare variabili pubbliche all'interno di una Sub o una Function, quindi per fare quello che dici tu dovrei dichiararle come private, ma come dicevo questo comporta il riempire tutte le funzioni di argomenti rendendo il tutto un pò più complicato.

          Sto valutando anche io se fregarmene di lasciare una serie di variabili inutilizzate (il programma gira lo stesso e senza rallentamenti tangibili), ma pensavo fosse una soluzione formalmente poco elegante per cui volevo capire dagli esperti (io non sono un informatico puro) se ci fossero dei criteri di progettazione del software che non ho considerato 🙂

          #26080 Risposta
          alfrimpa
          alfrimpa
          Partecipante
            15 pts

            Le variabili possono avere tre tipi di visibilità (variables scope)

            1) A livello di procedura ed in questa vanno dichiarate

            2) A livello di modulo e vanno dichiarate in cima al modulo in questione

            3) A livello di progetto VBA e vanno dichiarate come Public in un modulo standard-

            Alfredo

            #26083 Risposta

            Giulio
            Partecipante

              Alfrimpa, grazie per la mini lezione; non sono un informatico puro ma non sono nemmeno alle prime armi :): davo per scontato che dal topic fosse chiaro che il problema fosse un pò più complesso di così. Dato che il progetto è piuttosto complesso, ovviamente in funzione dell'utilizzo ho usato tutte e tre le tipologie di dichiarazione che hai citato. Il mio problema riguarda la gestione di quelle pubbliche (punto 3 che hai citato), che erano molto comode perchè servivano praticamente per tutto il progetto, ma ora che ho introdotto questo bivio di interfacce, ci sarà sempre un gruppo di variabili pubbliche non utilizzate. Se non sono stato sufficientemente chiaro posso provare a spiegarmi diversamente.

              #26085 Risposta
              tanimon
              tanimon
              Partecipante
                6 pts

                Ciao Giulio,

                ed un saluto ad Alfredo, che spero non se la prenda, ma mi è venuta voglia di farmi una sana risata

                 

                Giulio ha scritto:

                Se non sono stato sufficientemente chiaro posso provare a spiegarmi diversamente.

                Giulio, sei un grande.

                Hai detto tutto..... senza dire niente......

                Per quanto riguarda la tua richiesta, non vedo soluzioni se non quella di creare variabili Private ed utilizzare i vari UserForm in base all'Application.UserName

                 

                ciao

                Frank

                #26095 Risposta

                Giulio
                Partecipante

                  Ciao Frank, e grazie mille, sei molto gentile :)!

                  Al momento la soluzione di sfruttare Application.UserName non mi sembra possa essere risolutiva, a meno che non ci sia qualche modalità di utilizzo che al momento non ho considerato, perchè qualunque utente utilizzi questo programma potrebbe tranquillamente voler scegliere di andare, volta per volta, da una parte del bivio o dall'altra. Posso riassumere l'albero del software come un primo blocco di userform che istanziano una serie di variabili che saranno comuni a tutto il progetto, poi ad un certo punto un bivio che porta ad altri due blocchi di userform separati che sfruttano, oltre al primo insieme di variabili pubbliche già istanziate, ad altri due insiemi di variabili che invece sono ben separate. Entrambi i blocchi vanno però a richiamare numerose funzioni che sono suddivise in vari moduli che utilizzano le relativi variabili pubbliche di quel blocco, e la cosa si complica perchè anche molti eventi delle userform di ogni blocco richiamano le stesse variabili. Per questa ragione non vedo effettivamente altra soluzione comoda rispetto all'uso di variabili pubbliche. Frank, tu ritieni che sia ammissibile avere un blocco di variabili pubbliche dichiarate ma non utilizzate, o potrei essere processato al tribunale degli informatici? 😀

                  Giulio

                  #26104 Risposta
                  tanimon
                  tanimon
                  Partecipante
                    6 pts

                    Ciao Giulio,

                    Giulio ha scritto:

                    Frank, tu ritieni che sia ammissibile avere un blocco di variabili pubbliche dichiarate ma non utilizzate, o potrei essere processato al tribunale degli informatici?

                    concordo con te che è meglio evitare di dichiarare variabili che non saranno valorizzate nelle varie elaborazioni del progetto,

                    ma non credo che il file/progetto ne risentirà in modo negativo in termini di efficienza.

                    Lo stile di scrittura del codice a cui ti riferisci e la remora del fatto qualcuno potrebbe farti degli appunti sulla sua compilazione, ma che tra l'altro potrebbero essere uno spunto positivo, dipende da quanto il programma in questione sarà pubblico.

                    ciao

                    Frank

                    #26108 Risposta

                    Giulio
                    Partecipante

                      tanimon ha scritto:

                      Lo stile di scrittura del codice a cui ti riferisci e la remora del fatto qualcuno potrebbe farti degli appunti sulla sua compilazione, ma che tra l'altro potrebbero essere uno spunto positivo, dipende da quanto il programma in questione sarà pubblico.

                      Questo non è un problema, l'unica situazione in cui questo potrà avvenire sarà quando subentrerà qualcuno al mio posto, e a quel punto non sarà però nemmeno più un mio problema :)...Il senso di questo topic era più per crescita personale, sentire qualcuno più esperto di me per capire se esistono paradigmi di progettazione software VBA diversi e magari migliori del mio. 

                      Grazie mille per il feedback 😉

                      Giulio

                      #26109 Risposta
                      tanimon
                      tanimon
                      Partecipante
                        6 pts

                        ciao Giulio,

                        mi spiace non esserti stato particolarmente di aiuto,

                        ma per le mie conoscenze, non vedo alternative a quelle che ti ho già suggerito.

                         

                        buona serata

                        Frank

                        #26112 Risposta
                        Lucastar
                        Lucastar
                        Partecipante
                          4 pts

                          Se il tuo scopo è scrivere in maniera professionale un codice VBA, non credo che la dichiarazione delle variabili sia possa fare una grossa differenza. Ritengo ci siano altre caratteristiche che rendono professionale un codice.

                          Se sei interessato e conosci un po' di inglese, ti consiglio di cercare su youtube "Excel macro mastery".

                          é molto bravo e ha fatto un video che già dal titolo pare fare al caso tuo: "How to design and code an Excel VBA application like a pro"

                          #26132 Risposta

                          Giulio
                          Partecipante

                            In realtà Frank siete stati di grande aiuto, è un confronto che mi ha permesso di inquadrare il mio problema dalle prospettive di altre persone.

                            Lucastar, grazie per il consiglio, sicuramente darò un'occhiata al video.

                            Grazie a tutti e a presto 😀

                            Giulio

                            #26140 Risposta
                            tanimon
                            tanimon
                            Partecipante
                              6 pts

                              ciao Giulio,

                              Giulio ha scritto:

                              perchè qualunque utente utilizzi questo programma potrebbe tranquillamente voler scegliere di andare, volta per volta, da una parte del bivio o dall'altra.

                              discorso delle variabili a parte di cui abbiamo già parlato, il punto che riporto sopra, lo protesti risolvere

                              utilizzando proprio l'Application.userName ed in base a questo parametro, rendere visibili o meno le UserForm

                              per l'utente che sta utilizzando il file con apposita condizione nell'evento Workbook.Open e rendendoli di nuovo tutti

                              visibili nell'evento Workbook_BeforeClose per la verifica sulla successiva apertura del file.

                               

                              Ciao

                              Frank

                              #26151 Risposta

                              Giulio
                              Partecipante

                                Ciao Frank, purtroppo temo non sia possibile perchè l'utente sceglierà se passare a un blocco o all'altro mediante scelte gestite con controlli tipo combobox, option button ecc, quindi non è possibile intercettare la scelta in fase di apertura, ma bisogna aspettare che l'utente operi un certo tipo di scelte nell'interfaccia. 

                                Giulio

                              LoginRegistrati
                              Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
                              Rispondi a: Gestione variabili
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni:



                              vecchio frac - 2750 risposte

                              albatros54
                              albatros54 - 996 risposte

                              patel
                              patel - 889 risposte

                              Marius44
                              Marius44 - 766 risposte

                              Luca73
                              Luca73 - 652 risposte