Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 25 totali)
  • Autore
    Articoli
  • #4169 Score: 0 | Risposta

    ABRAMO48
    Partecipante
      1 pt
      Buongiorno, sono nuovo nel Forum,
      Ho sviluppato un programma in excel97 con delle macro (in gran parte fatte creare e poi riviste dal Generatore di Macro).
      Ora la cartella e i fogli di lavoro possono essere protetti, ma vedo che questo non protegge le macro da modifiche anche non volute dall'utente. Come posso fare?
      Forse il problema dovrebbe essere risolto da una sorta di "compilazione" delle macro, che traducendole in binario, oltretutto, le renderebbe anche più veloci in esecuzione?
      Sono assolutamente inesperto dell'argomento e sarei grato se qualcuno mi inquadrasse un'attimo la faccenda (a parte seguire il tutorial VBA che ho già visto disponibile).
      Grazie!!!
      #4175 Score: 0 | Risposta

      Ciano
      Partecipante
        Ciao Abramo,
        prima cosa che mi viene in mente,
        se vuoi proteggere le macro da scritture devi proteggere il VBA.
        Quindi:
        - Alt+F11 --> Strumenti --> Proprietà di VBAProject
        - clicca su "Protezione"
        - spulcia "proteggi progetto dalla visualizzazione" e inserisci una psw confermandola
        - salva il file
        Alla prossima apertura vedrai che premendo Alt+F8 sarà attivo solo "ESEGUI" mentre tutti gli altri pulsanti sono disabilitati ... naturalmente se entri nel VBA (Alt + F11) ed inserendo la psw iniziale, potrai modificare le tue macro.
        Spero che sia quello che stavi cercando
        ciao
        Ciano
        #4230 Score: 0 | Risposta

        ABRAMO48
        Partecipante
          1 pt
          Grazie Ciano! problema risolto, secondo le tue indicazioni.
          Per quanto riguarda le macro, mi domandavo se esiste una sorta di "compilazione" per renderle più veloci in esecuzione ... o no?
          Grazie, Abramo.
          #4235 Score: 0 | Risposta

          Ciano
          Partecipante
            Buongiorno,
            Abramo,
            l'unica cosa che io sappia per velocizzare le macro è quello di bloccare lo sfarfallio dello schermo, mentre è in esecuzione, altro non saprei ....
            metti questi comandi ad inizio "Sub" ed alla fine "Sub":

            `Sub nome_tua_sub()
            Application.ScreenUpdating = False
            ...
            .. tuo codice Sub
            ...
            Application.ScreenUpdating = True
            End Sub
            
            
            

             

            ciao

            Ciano

            #4237 Score: 0 | Risposta

            ABRAMO48
            Partecipante
              1 pt
              Non mi è chiaro dove va messa l'istruzione:

              
              

              prima di ogni sub?
              Cioè prima di ogni:
              Sub nome_tua_sub()
              ???
               
              #4238 Score: 0 | Risposta

              ABRAMO48
              Partecipante
                1 pt
                che confusione!!! (ho fatto un copia incolla e guarda che ca...) riprovo:

                Non mi è chiaro dove va messa l’istruzione:

                
                

                prima di ogni sub?

                Cioè prima di ogni:

                Sub nome_tua_sub()

                ???

                #4239 Score: 0 | Risposta

                ABRAMO48
                Partecipante
                  1 pt
                  niente da fare, acc!
                  non mi è chiaro dove va messa l'istruzione
                  
                  
                  prima di ogni sub?
                  #4240 Score: 0 | Risposta

                  Ciano
                  Partecipante
                    Abramo,
                    il

                     .. non centra nulla ... probabilmente non ho dato lo spazio giusto nello scrivere le righe d'istruzione ... devi guardare solo quello che è compreso tra "Sub" e "End Sub" che sono l'inizio e la fine obbligatorie che racchiudono la tua istruzione.
                    Quindi il comando che devi inserire sarebbe
                     
                    Application.ScreenUpdating = False 'da inserire sotto l'inizio "Sub"
                     
                    e
                     
                    Application.ScreenUpdating = True ' da inserire prima della fine "End Sub"
                     
                    spero che sia chiaro
                    ciao
                    Ciano
                    #4241 Score: 0 | Risposta

                    Marius44
                    Moderatore
                      52 pts
                      Salve a tutti
                      Per velocizzare (e un po', ma solo un po') l'esecuzione come dice Ciano (ciao) devi mettere quel codice all'inizio della macro e prima della fine.
                      Evito tutta la sfilza che appare e che non è possibile leggere.
                      Tu hai una macro che, ipotizziamo, si chiama Prova()
                      Ovviamente la macro inizierà con
                      Sub Prova()
                      ecco subito dopo questa riga metti Application.ScreenUpdating = False
                      poi ci sarà il tuo codice ed alla fine ci sarà
                      End Sub
                      Proprio prima di detta riga devi mettere Application.ScreenUpdating = True
                       
                      Spero sia chiaro. Ciao,
                      Mario
                       
                      #4244 Score: 0 | Risposta

                      ABRAMO48
                      Partecipante
                        1 pt
                        Grazie Ciano e Marco,
                        Applicato: tempi dimezzati!!!
                        Ma che succede se una volta applicato lo "screenupdating False" la sub esce (correttamente con un "exit sub" per una particolare condizione) senza aver eseguito la "sceenupdating true"?
                        Rimane impostato il False per tutte le sub che possono essere eseguite in seguito? Finché non viene eseguito uno "screenupdating True"?
                        #4245 Score: 0 | Risposta

                        ABRAMO48
                        Partecipante
                          1 pt
                          mmm ... Marius non Marco
                          #4246 Score: 0 | Risposta

                          Marius44
                          Moderatore
                            52 pts
                            Ciao
                             
                            Poco male, un lapsus è concesso (eheheh!)
                            Sì, esattamente.
                            Devi trovare il modo di intercettare l'errore e, eventualmente, rimandare ad una riga di codice che ripristini a True
                             
                            Ciao,
                            Mario
                            #4247 Score: 0 | Risposta

                            ABRAMO48
                            Partecipante
                              1 pt
                              oppure siccome non mi interessa "mai" lo sfarfallio dello schermo durante l'esecuzione delle macro, potrei anche lasciarlo il "False" ... o no?
                              Potrebbe dare problemi in altre circostanze al di fuori dell'esecuzione delle macro?
                              #4248 Score: 0 | Risposta

                              Marius44
                              Moderatore
                                52 pts
                                Ciao
                                se non ti interessa lo sfarfallio allora non mettere nè la prima istruzione nè la seconda.
                                Se lo lasci in False, come dici, non avrai più l'aggiornamento dello schermo.
                                 
                                Ciao,
                                Mario
                                #4249 Score: 0 | Risposta

                                Ciano
                                Partecipante
                                  mi intrometto un attimo,
                                  il così detto sfarfallio dello schermo non è altro che l'aggiornamento dei dati sullo schermo.
                                  quindi la messa in "False" fa in modo che lo schermo non si aggiorni fino a quando non sono stati fatte tutte le stringhe della "Sub" ... risparmiando anche qualcosa in tempo di esecuzione ... al ripristino del "True" non succede nient'altro che venga aggiornato lo schermo con tutti i dati corretti.
                                  Come ha detto Marius (che saluto), se non introduci la posizione "true" praticamente non otterrai sullo schermo l'aggiornamento desiderato dei tuoi dati.
                                  ciao
                                  Ciano
                                  #4250 Score: 0 | Risposta

                                  ABRAMO48
                                  Partecipante
                                    1 pt
                                    Ma una "prima volta" lo devo mettere da qualche parte, o lo posso impostare a livello di progetto? Come?
                                    #4251 Score: 0 | Risposta

                                    ABRAMO48
                                    Partecipante
                                      1 pt
                                      ahhh! Capito! Ciano. 
                                      Vuoi dire che alla fine un "True" ci vuole se vuoi vedere il risultato finale del lavoro (lo sfarfallio intermedio non mi interessa, ma il risultato finale sì, ovviamente).
                                      E' così?
                                       
                                      #4252 Score: 0 | Risposta

                                      Ciano
                                      Partecipante
                                        ok, Abramo
                                        tu puoi mettere in "false" ed eseguire più macro .. importante che alla fine dell'ultima macro prima di "End Sub" e quindi prima che esegua l'uscita dell'ultima macro .. tu metta il "true"
                                         
                                        Ciano
                                        #4253 Score: 0 | Risposta

                                        ABRAMO48
                                        Partecipante
                                          1 pt
                                          Tutto chiaro! Comunque, i tempi si sono dimezzati e le macro cono protette.
                                          Grazie per i vostri consigli, ora devo seguire un po' il tutorial VBA del forum, perché la gran parte delle macro le ho ottenute dal generatore di macro di excel e quindi penso non siano proprio perfettamente ottimizzate sia dal punto di vista "grammaticale" che sintattico" e, in ogni caso di una corretta programmazione ... Mi piacerebbe sottoporvene una così mi potreste dare qualche ragguaglio generale di impostazione che ne dite? (ho fatto il programmatore per tanti anni (Assembler, Cobol, Progress) ma non conosco per niente il VBA)
                                           
                                          #4254 Score: 0 | Risposta

                                          Marius44
                                          Moderatore
                                            52 pts
                                            Ciao
                                            Io sono autodidatta. Ho iniziato a cercare di capire il codice dei programmi del mitico Commodore64 (in Basic e listate ... chilometriche). Oggi con VBA me la cavicchio.
                                             
                                            Normalmente, ma non nella generalità dei casi, quando crei una macro col registratore, vi sono pezzi di codice superflui e che sono quelli che rallentano l'esecuzione. Un esempio banale: voglio copiare il contenuto di una determinata cella e riportarlo in un'altra. Bene. Cosa fa VBA?
                                            prima seleziona la cella che voglio copiare, quindi la copia, poi seleziona la cella dove voglio incollare il contenuto e, alla fine, incolla. I due passi di .Select sono inutili.
                                             
                                            Prova a rileggere la macro e vedi cosa puoi eliminare.
                                            Ciao,
                                            Mario
                                            #4834 Score: 0 | Risposta

                                            ABRAMO48
                                            Partecipante
                                              1 pt

                                              Allora, lo screenupdating  funziona perfettamente, ma, ogni volta che nella macro cambio finestra, sul video compare la nuova finestra, come faccio a evitare questo? Insomma vorrei non vedere nulla riflesso sul video salvo la finestra da cui ho lanciato la Macro.

                                              Grazie carissimi!

                                              #4835 Score: 0 | Risposta

                                              ABRAMO48
                                              Partecipante
                                                1 pt

                                                mmm, riscrivo: Allora, lo screenupdating  funziona perfettamente, ma, ogni volta che nella macro cambio finestra, sul video compare la nuova finestra, come faccio a evitare questo? Insomma vorrei non vedere nulla riflesso sul video salvo la finestra da cui ho lanciato la Macro. Grazie!

                                                 

                                                #4836 Score: 0 | Risposta

                                                Ciano
                                                Partecipante

                                                  ciao Abramo,

                                                  purtroppo non riesco a seguirti:

                                                  cosa intendi che "nella macro cambio finestra, sul video compare la nuova finestra, "

                                                  nella macro hai riferimenti di fogli???

                                                  e poi "vorrei non vedere nulla riflesso sul video salvo la finestra da cui ho lanciato la Macro"

                                                  se all'inizio della tua macro selezioni un foglio diverso e successivamente si eseguono i calcoli .... è normale non vedere il foglio dei calcoli (ma il foglio selezionato ed attivato) .. però non so se è questo che intendi.

                                                  ps: magari se alleghi il tuo file, senza dati sensibili, con il risultato che desideri, possiamo capire meglio ... fatto così di impeto, l'interpretazione è personale.

                                                  Ciano

                                                  #4837 Score: 0 | Risposta

                                                  Ciano
                                                  Partecipante

                                                    agli amministratori .... cosa sbaglio per non riuscire a scrivere decentemente?.. ahahah... grazie mille

                                                    #4965 Score: 0 | Risposta

                                                    ABRAMO48
                                                    Partecipante
                                                      1 pt

                                                      Ricominciamo da capo:

                                                      allora, con lo sceenupdating = false si riducono molto i tempi di esecuzione, ma quando nella macro cambio finestra questa mi cambia anche sullo schermo. Domanda come posso fare perché il programma rimanga sempre sulla finestra da dove ho lanciato la macro?

                                                      Grazie!

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 25 totali)
                                                    Rispondi a: Protezione Macro
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: