di Anthony47 » 15/09/09 15:22
Ti deve essere chiaro che se non hai protetto con password il progetto vba, allora chiunque puo' accedere alle macro (deve fare tasto dx sul tab col nome del foglio) e vedere quale e' la password di foglio; e se anche hai protetto il progetto, in giro ci sono decine di programmi che aiutano a recuperare "password dimenticate". Per dire che la protezione e' una cosa piu' complessa di una password di excel, quindi se i dati sono sensibili o comunque delicati sei ancora esposta.
Su questo tema in genere non suggerisco nulla di preciso, perche' la sicurezza e' come un campo minato: si sa che ci sono le trappole, ma solo il progettista (tu o un tuo collaboratore) deve sapere dove sono e di che natura.
Tutto cio' mi porta a suggerire di non distribuire l' intera "cartella di lavoro", ma tanti file contenenti ognuno un foglio di lavoro diverso; e' meno scenografico ma praticamente piu' sicuro.
Lo puoi fare abbastanza facilmente con una macro registrata:
-chiudi tutti i file eccetto quello "da lavorare" che contiene il foglio Riepilogo
-partendo da un foglio diverso da Riepilogo avvii la registrazione macro, poi esegui in sequenza:
-vai sul foglio Riepilogo
-filtri i dati per il primo ufficio, copi questi dati
-crei un nuovo file (Menu /File /Nuovo)
-ci incolli i dati copiati dal Riepilogo
-sulla prima cella libera di col A inserisci la scritta "##zc## Nuovi dati" (senza virgolette)
-eventualmente proteggi con password il foglio (vedi dopo)
-salvi il file col nome che preferisci(es Ufficio1.xls); eventualmente assegna al file una sua password di lettura.
-chiudi il file tornando cosi' su Riepilogo
-filtri i dati del secondo ufficio e ripeti il ciclo per ogni file da generare
-chiudi il file di Riepilogo
-fermi la registrazione macro.
In questo modo puoi generare i file da distribuire ripetendo questa macro.
Per quanto riguarda l' aggiornamento del Riepilogo, se questo consiste nell' aggiungere su Riepilogo le sole righe aggiunte su ognuno dei file distribuiti, allora bisogna 1) assicurarsi che gli altri record non siano modificabili (eventualmente proteggi con password if foglio durante la fase di registrazione macro, dopo aver sprotetto le righe sottostanti i dati presenti) e 2)far aggiungere nuovi dati dopo la riga marcata ##zc## Nuovi dati.
Quando riceverai i file indietro:
sul file principale, quello con Riepilogo ma partendo da un foglio diverso da Riepilogo, registri una seconda macro mentre:
-apri il primo file, es Ufficio1
-attivi il foglio dati
-vai in fondo, selezioni l' ultima riga con nuovi dati, copia
-vai sul file principale, vai in fondo a Riepilogo e selezioni la prima cella libera
-incolli i dati copiati da file
-torni a Ufficio1 e cancelli la riga appena copiata
-chiudi il file senza salvare
-ripeti tutto il ciclo con gli altri Ufficioxx
-fermi la registrazione macro
La macro cosi' ottenuta e' da modificare per:
-quando api il file UfficioX, posizionarsi automaticamente in col A dell' ultima riga(*1)
-verificare se il contenuto di cella e' "##zc## Nuovi dati", se NO procedi con Copia, vai su Riepilogo, Incolla, Cancella riga, ripeti con la nuova "ultima riga"; se SI vai a Chiudi file. (*2)
-quando devi incollare su Riepilogo, posizionarsi automaticamente su prima riga libera. (*1)
*1: di base farai un Cells(Rows.count,1).End(XLup).select per posizionarti sull' ultima cella occupata di col A, oppure Cells(Rows.count,1).End(XLup).Offset(1,0).select per posizionarti sulla prima cella libera.
*2: qui dovrai realizzare un loop (Do /Loop) da ui esci quando trovi la stringa "##zc## Nuovi dati" in colonna A (Exit Do).
Guarda nel forum, ci sono spesso discussioni che trattano questi temi; ma se non risolvi facilmente posta ancora con il codice generato dallla seconda registrazione macro.
Direi che ce n' e' abbastanza per oggi...
Ciao.