› Sviluppare funzionalita su Microsoft Office con VBA › Aggiornare file excel senza modificarne le macro
-
AutoreArticoli
-
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
Come aggiorni ? non ti limiti a copiare il file xlsm della cooperativa sul tuo pc ?
ciao a tutti
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
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 🙂
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.
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).
ciao a tutti,
ed un saluto ad Andrea e Francesco
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.xlsmOra 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
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.
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 SubIl 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
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.ciao a tutti,
Hai fatto il primo passo ed è encomiabile! Bravo.
Angelo, bravo anche da parte mia,

ora come dicevo e dice vecchio frac,
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 SubOttimo 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.xlsmio scriverei così:
'apro il file angelo.xlsm da cooperativa.xlsm Set wb_destinazione = Workbooks.Open (Filename:="tuo_percorso\angelo.xlsm") ' file angelo.xlsmperché 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 a tutti,
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
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
cerco di tenermi la matita temperata al meglio
a riecchime,
infatti questo
Con aperto il solo file cooperativa.xlsm
serviva proprio a far capire ad Angelo quanto tu hai segnalato con
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
Ostregheta, qui le cose si complicano, ma ci provo!
Ostregheta
ti te se' un dei nossi
No, non è complicato, fai un passo alla volta. Tanimon ha appena iniziato 🙂
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
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 Withsono 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 🙂
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
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
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
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:
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
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
Va bene, grazie del feedback e buon lavoro. Se hai ancora bisogno sai dove trovarci 🙂
-
AutoreArticoli
