Sviluppare funzionalita su Microsoft Office con VBA Aggiornare file excel senza modificarne le macro

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

    Angelo

      Chiedo aiuto, ho un file di gestione presso una piccola cooperativa sociale nella quale si fanno lavoretti che poi vengono registrati 

      Ogni settimana devo aggiornare il file che ho sul mio pc con quello della cooperativa, che tengo anche come backup.

      Mi capita anche di modificare delle macro per funzioni che mi vengono richieste; questa operazione la faccio sul mio pc, ma quando devo aggiornare i dati con quelli della cooperativa, mi trovo a dover copiare tutto il file e rifare le macro.

      E' possibile aggiornare l'intero file senza modificarne le macro? Così facendo avrei i dati aggiornati e non perderei il lavoro fatto sulle macro.

      Grazie

      #35108 Score: 0 | Risposta

      patel
      Moderatore
        51 pts

        Come aggiorni ? non ti limiti a copiare il file xlsm della cooperativa sul tuo pc ?

        #35119 Score: 0 | Risposta

        tanimon
        Partecipante
          16 pts

          ciao a tutti 

          Angelo ha scritto:

          Ogni settimana devo aggiornare il file che ho sul mio pc con quello della cooperativa, che tengo anche come backup.

          per quel che ho capito, hai 2 alternative:

          1 - copi i fogli dal file della cooperativa sul file del tuo pc e salvi il file sul tuo pc con le macro  estensione          .xlsm (con macro)

          2 - effettui le registrazioni sul file sul tuo pc con estensione .xlsm e lo salvi con estensione .xlsx (senza              macro) e lo passi sul pc della cooperativa con una chiavetta o LAN locale se presente.

          ciao

          Frank

          #35121 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            tanimon ha scritto:

            per quel che ho capito, hai 2 alternative:

            3. Utilizzi una base dati separata (potrebbe essere un altro file Excel o un semplice file di testo), e sviluppi l'interfaccia in un file che poi distribuisci al cliente quando hai terminato le modifiche (io farei tutto con un'accoppiata di due file Access, ma anche Excel va bene).

            Se poi c'è anche una LAN con cartelle condivise, si va di lusso 🙂

            #35122 Score: 0 | Risposta

            Angelo

              Grazie a tutti per il tempo e le risposte.

              3)  non posso utilizzare una base dati separata perchè ci sono 8 fogli con dati e formule che non posso spostare 

              2)  non posso mandare alla cooperativa il file in formato xlsx perchè le macro servono proprio a loro per velocizzare le operazioni di registrazione.

              1)  quello che sto facendo oggi è proprio quello che mi suggerisce tanimon , ma io vorrei una macro che mi copiasse ogni foglio del file della cooperativa sul mio file, così avrò tutti i dati aggiornati, ma senza toccare le macro del mio. dopo eventuali correzioni dei dati della cooperativa o miglioramenti delle macro o nuove macro che faccio io, invierò il nuovo file alla cooperativa.

              #35123 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                E' fattibile   

                La macro deve:

                - Creare un riferimento al foglio da copiare e un riferimento al foglio in cui copiare.

                - Col secondo aperto, quello di destinazione, aprire il primo, scorrere i fogli e fare due cose:

                - - - Se il foglio esiste già, eliminarlo dal secondo file (quello di destinazione).

                - - - Copiare in tutta sicurezza il foglio dal primo al secondo file.

                - Chiudere il primo file e chiederti di salvare (o salvare direttamente, ma io controllerei per precauzione).

                #35129 Score: 0 | Risposta

                tanimon
                Partecipante
                  16 pts

                  ciao a tutti,

                  ed un saluto ad Andrea e Francesco  

                  vecchio frac ha scritto:

                  E' fattibile

                  come ha detto vecchio frac,
                  non è una cosa impossibile, ma non vorrei passarti un esempio che ti risulterebbe di difficile comprensione, e soprattutto più difficile da aggiornare in futuro, non avendone capito il procedimento.

                  quindi vai per gradi,

                  metti una copia dei due file .xlsm in una cartella a piacere e con il registratore di macro,
                  registrane una partendo dal file "cooperativa.xlsm" che:

                  - apre il file angelo.xlsm dalla cartella a piacere
                  - tranne uno, elimina uno alla volta tutti i fogli del file angelo.xlsm
                  - copia dal file cooperativa.xlsm, SOLAMENTE il primo foglio nel file angelo.xlsm
                  - salva il file angelo.xlsm
                  - chiude il file angelo.xlsm
                  - termina la registrazione della macro dal file cooperativa.xlsm

                  Ora dai un'occhiata al codice della macro che hai registrato e cerca di capirci qualcosa,
                  se vuoi postala in modo appropriato con l'apposito tasto sul Forum e qualcuno ti spiegherà
                  quello che ti risulta ostico.

                  Dopo e RIPETO DOPO che avrai cominciato a capirci qualcosa,
                  sempre a piccoli passi, vedremo di "perfezionare" il codice che hai registrato.

                  ciao e buon lavoro.

                  Frank

                  #35131 Score: 0 | Risposta

                  Angelo

                    Ok tanimon, ora ci provo a fare come mi hai suggerito, faccio tutte le prove sulle copie dei due files e vedo di tirare fuori qualcosa di buono.

                    Intanto grazie mille.

                    #35132 Score: 0 | Risposta

                    Angelo

                      E' stato più facile di come pensavo,

                      -ho copiato uno alla volta tutti i fogli aperti da Gestione suo a Gestione mio, qui ho messo il codice vba per due fogli, quindi si replica per tutti i fogli che interessano del file.

                      Perfetto, vi ringrazio

                      Sub aggiorna()
                      '
                      ' aggiorna Macro
                      '
                      
                      '
                          Windows("Gestione suo.xlsm").Activate
                          Sheets("Commesse in corso").Select
                          Cells.Select
                          Selection.Copy
                          Windows("Gestione mio.xlsm").Activate
                          Sheets("Commesse in corso").Select
                          Range("A1").Select
                          ActiveSheet.Paste
                          Range("A1").Select
                          
                          Windows("Gestione suo.xlsm").Activate
                          Sheets("Elenco ddt").Select
                          Cells.Select
                          Selection.Copy
                          Windows("Gestione mio.xlsm").Activate
                          Sheets("Elenco ddt").Select
                          Range("A1").Select
                          ActiveSheet.Paste
                          Range("A1").Select
                      
                      End Sub
                      
                      #35133 Score: 0 | Risposta

                      Angelo

                        Il problema era che se sul mio file io facevo modifiche alle macro, o ne creavo di nuove, copiando il file della cooperativa rischiavo di cancellare tutto il lavoro fatto sulle macro.

                        Così facendo invece posso aggiornare tutti i dati che la cooperativa inserisce nei vari fogli e nel contempo modificare, o creare nuove macro (lavoro che faccio di sera o quando ho tempo) sul mio file senza rischio di perdere il lavoro da me fatto.

                        Di nuovo grazie mille

                        #35137 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          tanimon ha scritto:

                          vedremo di "perfezionare" il codice che hai registrato

                          Hai fatto il primo passo ed è encomiabile! Bravo. però adesso come dice tanimon io non mi fermerei. Il codice che produce il registratore di macro è inguardabile    sono sicuro che si possono migliorare le performances e anche la leggibilità. Inoltre si possono automatizzare anche le operazioni iniziali di eliminazione dei fogli da sostituire.

                          #35138 Score: 0 | Risposta

                          tanimon
                          Partecipante
                            16 pts

                            ciao a tutti,

                            vecchio frac ha scritto:

                            Hai fatto il primo passo ed è encomiabile! Bravo.

                            Angelo, bravo anche da parte mia, 

                             

                            ora come dicevo e dice vecchio frac,

                            vecchio frac ha scritto:

                            Il codice che produce il registratore di macro è inguardabile

                            facciamo un altro passetto.

                            per fare in automatico quello che è il tuo obiettivo finale, hai bisogno di 2 variabili oggetto:

                            due file Excel di cui conosci bene il loro nome ed il loro percorso sul tuo computer.

                            Con aperto il solo file cooperativa.xlsm

                            - sul file cooperativa.xlsm  lato VBA,

                            - aggiungi un modulo dal menù Inserisci

                            - incolla tutto il codice sotto riportato

                            - eseguilo riga per riga, utilizzando il tasto F8 fino ad End Sub

                            e vediamo che succede e soprattutto cosa capisci.

                            Dopo e RIPETO DOPO, passeremo al passaggio successivo.

                            ciao e buon lavoro

                            Frank

                            Option Explicit
                            
                            Sub Macro1()
                            
                            '==== IMPORTANTE ====
                            
                            ' Option Explicit alla prima riga in alto, obbliga la dichiarazione delle variabili!
                            ' ne scoprirai l'importanza col tempo...
                            
                            '==== IMPORTANTE ====
                            
                            'dichiaro 2 variabili oggetto, sulle quali lavoreremo nel prossimo passaggio
                            Dim wb_origine As Workbook, wb_destinazione As Workbook
                            
                            Set wb_origine = ThisWorkbook ' file cooperativa.xlsm
                            
                            'apro il file angelo.xlsm da cooperativa.xlsm
                            Workbooks.Open Filename:="tuo_percorso\angelo.xlsm"
                            Set wb_destinazione = Workbooks(2) ' file angelo.xlsm
                            
                            
                            MsgBox wb_origine.Name
                            MsgBox wb_destinazione.Name
                            
                            
                            'chiudo il file angelo.xlsm salvando le modifiche
                            wb_destinazione.Close savechanges:=True
                            
                            'libero la memoria utilizzata per le 2 variabili workbooks
                            Set wb_origine = Nothing
                            Set wb_destinazione = Nothing
                            
                            End Sub
                            

                             

                             

                             

                            #35139 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Ottimo tanimon,

                              ti faccio la punta alla matita visto che ormai mi conosci e sai che non resisto 🙂

                              'apro il file angelo.xlsm da cooperativa.xlsm
                              Workbooks.Open Filename:="tuo_percorso\angelo.xlsm"
                              Set wb_destinazione = Workbooks(2) ' file angelo.xlsm
                              

                              io scriverei così:

                              'apro il file angelo.xlsm da cooperativa.xlsm
                              Set wb_destinazione = Workbooks.Open (Filename:="tuo_percorso\angelo.xlsm")    ' file angelo.xlsm

                              perché non è scontato che Workbooks(2) sia il file appena aperto (magari ce n'era già un altro aperto in precedenza, e allora questo sarebbe il terzo).

                              #35140 Score: 0 | Risposta

                              tanimon
                              Partecipante
                                16 pts

                                ciao a tutti,

                                vecchio frac ha scritto:

                                perché non è scontato che Workbooks(2) sia il file appena aperto (magari ce n'era già un altro aperto in precedenza, e allora questo sarebbe il terzo).

                                ciao vecchi frac,

                                l'osservazione ci sta, ma è anche vero che ho anche specificato 

                                tanimon ha scritto:

                                Con aperto il solo file cooperativa.xlsm

                                - sul file cooperativa.xlsm  lato VBA,

                                - aggiungi un modulo dal menù Inserisci

                                - incolla tutto il codice sotto riportato

                                - eseguilo riga per riga, utilizzando il tasto F8 fino ad End Sub

                                cerco di tenermi la matita temperata al meglio    

                                ciao

                                Frank

                                #35141 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  tanimon ha scritto:

                                  cerco di tenermi la matita temperata al meglio

                                   

                                  #35142 Score: 0 | Risposta

                                  tanimon
                                  Partecipante
                                    16 pts

                                    a riecchime,

                                    infatti questo 

                                    tanimon ha scritto:

                                    Con aperto il solo file cooperativa.xlsm

                                    serviva proprio a far capire ad Angelo quanto tu hai segnalato con 

                                    vecchio frac ha scritto:

                                    perché non è scontato che Workbooks(2) sia il file appena aperto (magari ce n'era già un altro aperto in precedenza, e allora questo sarebbe il terzo).

                                    comunque ci siamo capiti  

                                    ciao

                                    Frank

                                     

                                    #35145 Score: 0 | Risposta

                                    Angelo

                                      Ostregheta, qui le cose si complicano, ma ci provo!

                                      #35146 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        Angelo ha scritto:

                                        Ostregheta

                                         ti te se' un dei nossi   

                                        No, non è complicato, fai un passo alla volta. Tanimon ha appena iniziato 🙂

                                        #35147 Score: 0 | Risposta

                                        Angelo

                                          Tanimon, io ci ho provato

                                          funziona tutto, ma non ne ho capito l'utilità

                                          che schiappa che sono,

                                          ho fatto un programma di gestione di questa piccola cooperativa che registra il materiale in arrivo, gli ordini di lavorazione, va a prendere i codici relativi a quell'articolo, li stampa su una scheda di lavorazione nella giusta quantità, poi scarica l'ordine andando a scaricare il materiale prelevato quindi aggiorna il magazzino, tiene conto dei minuti di lavorazione per capire quanto dovrebbe costarci la lavorazione, poi compila in automatico la bolla di spedizione, poi registra in pdf la bolla (adesso devo aggiungere un codice per mandare via email la bolla al giusto Cliente) poi ... ho altre funzioni che non ricordo più.

                                          E' un programma che ho sviluppato da volontario in molto tempo sia perchè ho imparato passo passo il VBA, sia perchè gli operatori della cooperativa mi chiedevano funzioni supplementari, ma dopo tutto ciò, sono certo che le mie routine sono veramente INGUARDABILI come dici tu, però funzionano !! e ne sono contento, ma se c'è da imparare qualcosa di nuovo non mi tiro indietro.

                                          beh dai dimmi a cosa serve la tua routine

                                          #35148 Score: 0 | Risposta

                                          tanimon
                                          Partecipante
                                            16 pts

                                            ciao a tutti,

                                            allora facciamo un altro passo:

                                            visto che un file file di Excel deve avere almeno un foglio,

                                            la porzione di codice che segue, elimina tutti i fogli del file angelo.xlsm tranne il primo.

                                            prova ad individuare il numero di riga dove inserirlo e dai un'occhiata a cosa fa.

                                            Dopo e RIPETO DOPO,

                                            ce ne sarà una porzione che copia i fogli dal un file all'altro...

                                            ciao e buon lavoro.

                                            Frank

                                            Dim n As Integer
                                            With wb_destinazione
                                            Application.DisplayAlerts = False
                                                For n = .Worksheets.Count To 2 Step -1
                                                    .Worksheets(n).Delete
                                                
                                                Next n
                                            Application.DisplayAlerts = True
                                            End With

                                             

                                            #35149 Score: 0 | Risposta

                                            vecchio frac
                                            Senior Moderator
                                              272 pts

                                              Angelo ha scritto:

                                              sono veramente INGUARDABILI come dici tu

                                              Che il codice fosse inguardabile l'avevo detto io e non tanimon    ed è una critica al Registratore di macro e non a te!

                                              Per il resto, visto che hai già esperienza di VBA, fatti guidare ed abbi pazienza con te stesso, se segui tanimon vedrai che capirai tutto alla fine 🙂

                                              #35150 Score: 0 | Risposta

                                              Angelo

                                                Nessun problema, evviva le critiche se mi fanno crescere.

                                                Ho fatto come dici, ho ottenuto il mio file con il solo primo foglio.

                                                Ti voglio però mettere in guardia (guarda come sono presuntuoso!) se copi i fogli dal file Cooperativa sul mio, rischi di copiare pari pari le formule che ricercano codici, articoli, quantità, descrizioni, numeri di bolla ecc. dal file della Cooperativa e quando andrò ad aprire il mio file, mi dirà di aggiornare i collegamenti al primo file, COSA CHE NON VOGLIO.

                                                Ma mi rimetto ai tuoi consigli 

                                                #35151 Score: 0 | Risposta

                                                tanimon
                                                Partecipante
                                                  16 pts

                                                  ciao a tutti,

                                                  allora,

                                                  a parte il merito della tua richiesta, facciamo qualche considerazione extra:

                                                  1 - continui a postare da utente "non registrato" senza allegare files per dimostrare come hai applicato 

                                                  i suggerimenti che hai ricevuto;

                                                  2 - dichiari di avere creato un programma da volontario che presume un minimo di conoscenza di                    programmazione 

                                                  Angelo ha scritto:

                                                  E' un programma che ho sviluppato da volontario in molto tempo sia perchè ho imparato passo passo il VBA,

                                                  3 - lamenti che il suggerimento che hai ricevuto, effettua delle operazioni che non vuoi che vengano                  eseguite

                                                  Angelo ha scritto:

                                                  Ti voglio però mettere in guardia (guarda come sono presuntuoso!) se copi i fogli dal file Cooperativa sul mio, rischi di copiare pari pari le formule che ricercano codici, articoli, quantità, descrizioni, numeri di bolla ecc. dal file della Cooperativa e quando andrò ad aprire il mio file, mi dirà di aggiornare i collegamenti al primo file, COSA CHE NON VOGLIO.

                                                  4 - ti ricordo che quello che NON VUOI VENGA ESEGUITO, lo hai chiesto tu:

                                                  Angelo ha scritto:

                                                  E' possibile aggiornare l'intero file senza modificarne le macro? Così facendo avrei i dati aggiornati e non perderei il lavoro fatto sulle macro.

                                                  5 - invece che l'intero foglio,

                                                        di ogni foglio, si potrebbe copiare il solo range utilizzato, ma cambiano alcune istruzioni

                                                   

                                                  6  - sul  fatto che tu sia presuntuoso, non ho elementi di valutazione, ma ti garantisco che anch'io

                                                       sono ad un buon livello   

                                                   

                                                  Morale, se sei ancora interessato:

                                                  - registrati al Forum

                                                  - allega i tuoi 2 file con pochi dati e senza dati sensibili

                                                  - visto che non sei DIGIUNO ed ad un punto "accettabile",  prova a fare qualcosa anche tu!

                                                  - RICORDA che in futuro, non è scontato che troverai qualcuno disposto a "produrti"

                                                    un file che interessa SOLO A TE.

                                                  - e visto che interessa SOLO A TE, dimostra ciò che sei riuscito a fare, non è detto,

                                                     ma forse, qualcuno ti darà una mano.

                                                   

                                                  Buon lavoro e buona serata.

                                                  Frank

                                                   

                                                  #35341 Score: 0 | Risposta

                                                  Angelo
                                                  Partecipante

                                                    Ragazzi, ringrazio tutti per il vostro tempo, disponibilità e suggerimenti.

                                                    Non è che non voglio allegarvi il file, ma ci sono 24 macro più o meno lunghe, ma sopratutto 23 fogli con dati sensibili per i ragazzi della cooperativa , per i loro educatori e per i clienti che ci danno il lavoro.

                                                    Ho risolto in parte con Teamviewer facendo le modifiche da ogni dove mi trovo e poi per quella volta ogni tanto, posso pure fare come ho sempre fatto.

                                                    Di nuovo grazie e saluto

                                                     

                                                    #35342 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      272 pts

                                                      Va bene, grazie del feedback e buon lavoro. Se hai ancora bisogno sai dove trovarci 🙂

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 25 totali)
                                                    Rispondi a: Aggiornare file excel senza modificarne le macro
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: