Sviluppare funzionalita su Microsoft Office con VBA Abilitare e Disabilitare un userform

Login Registrati
Stai vedendo 14 articoli - dal 26 a 39 (di 39 totali)
  • Autore
    Articoli
  • #46137 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      scossa ha scritto:

      Sono d'accordo con te, anche se io, piuttosto di una variabile pubblica (capita che si "perdano"), preferisco affidarmi ad un named range.

      Si', lo trovo anche piu' raffinato. Ma io sono un po' antico da questo punto di vista    

      #46232 Score: 0 | Risposta

      Luca73
      Partecipante
        58 pts

        Ciao a tutti, 

        quando avevo visto il post iniziale avevo pensato anche io ad una variabile pubbliac, poi ho fatto un po' di prove e in effetti ho avuto qualche problema...A volte non era più valorizzata...Quindi ripensando a vecchi post avevo pensato alla soluzione di scossa usando un "named Range".

        Avrei soltanto una domanda per scossa:

        perche farglielo aggiungere ad ogni Apertura di Workbook?

        Private Sub Workbook_Open()
          Me.Names.Add "bShowUF", RefersTo:=True
        End Sub

         

        #46233 Score: 0 | Risposta

        scossa
        Partecipante
          37 pts

          Luca73 ha scritto:

          perche farglielo aggiungere ad ogni Apertura di Workbook?

          giusta osservazione: in realtà, se il name esiste, il metodo .Add non "aggiunge" un nuovo name ma si limita a "sostituirlo" (*).

          Il motivo per cui l'ho usato è semplicemente perché non puoi essere certo del valore salvato alla chiusura quindi, all'apertura, devi impostarlo comunque a True (quindi avrei dovuto comunque usare Me.Names("bShowUF").RefersTo:=True ); considerato che la soluzione andava applicata ad un file già esistente, mi sono risparmiato di scrivere la solita pappardella di come creare il name ("propedeutica al funzionamento è la creazione di un name ......").

          (*) per la precisione il name viene eliminato e ricreato, ma alla fine in questo contesto (evento Open), la differenza in termini di "costo macchina" è irrisoria.

           

          #46234 Score: 0 | Risposta

          DeletedUser
          Bloccato
            13 pts

            Luca73 ha scritto:

            quando avevo visto il post iniziale avevo pensato anche io ad una variabile pubbliac, poi ho fatto un po' di prove e in effetti ho avuto qualche problema...

            forse questa è la spiegazione? questa la fonte:

            https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-scope-and-visibility

             

            Public module-level scope
            If you declare a module-level variable as public, it's available to all procedures in the project. In the following example, the string variable can be used by any procedure in any module in the project.

            VBCopy 
            ' Include in Declarations section of module.
            Public strMsg As String

            All procedures are public by default, except for event procedures. When Visual Basic creates an event procedure, the Private keyword is automatically inserted before the procedure declaration. For all other procedures, you must explicitly declare the procedure with the Private keyword if you don't want it to be public.

            Use public procedures, variables, and constants defined in standard modules or class modules from referencing projects. However, you must first set a reference to the project in which they are defined.

            Public procedures, variables, and constants defined in other than standard or class modules, such as form modules or report modules, are not available to referencing projects, because these modules are private to the project in which they reside.

            #46244 Score: 0 | Risposta

            Luca73
            Partecipante
              58 pts

              Grazie a tutti per le delucidazioni

              #46247 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                fsm ha scritto:

                forse questa è la spiegazione? questa la fonte:

                https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-scope-and-visibility

                non direi: spiega solo ambito e visibilità delle variabili (/costanti/procedure) pubbliche; non trovo traccia del fatto che possano, a volte, esssere affette da "demenza senile".

                #46248 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  scossa ha scritto:

                  a volte, esssere affette da "demenza senile".

                  Non ho seguito bene il discorso delle variabili pubbliche, in questa discussione, però non mi mai capitato che una variabile dimenticasse il suo stato (demenza senile). Che mi sono perso?

                  #46250 Score: 0 | Risposta

                  scossa
                  Partecipante
                    37 pts

                    LucaSR ha scritto:

                    però non mi mai capitato che una variabile dimenticasse il suo stato (demenza senile). Che mi sono perso?

                    a me è capitato (e da quel che leggo non solo a me) che le variabili pubbliche, specie in file con codici complessi, non siano così "sicure" oppure, pur essendolo, vengano "involontariamente" variate, ad esempio essendo passate byRef (default) anziché byVal ad una sub/function.

                    #46251 Score: 0 | Risposta

                    LucaSR
                    Partecipante
                      15 pts

                      Capisco    opto più per la seconda. 

                      #46255 Score: 0 | Risposta

                      DeletedUser
                      Bloccato
                        13 pts

                        fsm ha scritto:

                        Public procedures, variables, and constants defined in other than standard or class modules, such as form modules or report modules, are not available to referencing projects, because these modules are private to the project in which they reside.

                        chiedo lumi e conferme:

                        mi riferivo a quanto sopra, il mio inglese è quello che è, ma per quel capisco...

                        una variabile pubblica dichiarata tale in un modulo diverso da standard o di classe

                        e quindi di Evento,

                        non può essere richiamata da routines in moduli standard o di UserForm.

                        Ho capito bene?

                        #46257 Score: 0 | Risposta

                        scossa
                        Partecipante
                          37 pts

                          fsm ha scritto:

                          una variabile pubblica dichiarata tale in un modulo diverso da standard o di classe

                          e quindi di Evento,

                          non può essere richiamata da routines in moduli standard o di UserForm.

                          Ho capito bene?

                          Hai capito benissimo, ma qui stiamo discutendo di variabili public dichiarate (chiaramente) in un modulo standard, infatti "normalmente" funzionano, poi ad un certo punto, specie se dichiarate as Variant "si perdono"  (perché vengano "involontariamente" variate, ad esempio essendo passate byRef (default) anziché byVal ad una sub/function) .

                          Prova il seguente codice (inserito in un modulo standard):

                          Public vMyVar As Variant
                          
                          Sub prova()
                            vMyVar = 6
                            MsgBox fMyFunc(vMyVar) & vbTab & "vMyVar: " & vMyVar
                            MsgBox fMyFunc2(vMyVar) & vbTab & "vMyVar: " & vMyVar
                            MsgBox fMyFunc3(vMyVar) & vbTab & "vMyVar: " & vMyVar
                          End Sub
                          
                          
                          Function fMyFunc(vVar)
                            fMyFunc = vVar * 2
                          End Function
                          
                          Function fMyFunc2(vVar)
                            vVar = 12 + vVar
                            fMyFunc2 = vVar
                          End Function
                          
                          Function fMyFunc3(vVar)
                            fMyFunc3 = vVar * 2
                            Set vVar = Nothing
                          End Function
                          
                          #46258 Score: 0 | Risposta

                          LucaSR
                          Partecipante
                            15 pts

                            Una variabile pubblica per definizione è visibile in tutto il progetto (parlo di programmazione). Detto questo, metto le mani avanti perché non ho mai usato una variabile pubblica nel modulo di un foglio di lavoro su Excel ma solo su moduli STD o su moduli di Form. Lascia stare le variabili pubbliche su moduli di classe perché per me sono da bandire, le variabili in una classe (oggetto) vanno TUTTE incapsulate perché queste diventano gli attributi/proprietà dell'oggetto che verrà istanziato.

                            #46259 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              E' ben brutto che una variabile pubblica in un modulo standard si perda... sostituiamo tutte queste variabili con terne Property Get/Let/Set?

                              #46260 Score: 0 | Risposta

                              DeletedUser
                              Bloccato
                                13 pts

                                scossa ha scritto:

                                Hai capito benissimo

                                grazie per il gentile riscontro. Appena ho tempo testerò la tua proposta/verifica.

                                Grazie

                                 

                              Login Registrati
                              Stai vedendo 14 articoli - dal 26 a 39 (di 39 totali)
                              Rispondi a: Abilitare e Disabilitare un userform
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: