› Excel e gli applicativi Microsoft Office › Proteggere una cartella (con password) da un'altra cartella
-
AutoreArticoli
-
Buonasera a tutti,
sono sempre io ma con un caso un pò particolare..
Provo a spiegare.. in una cartella (Cartel1) sono presenti userform, textbox, macro ecc, tutto ciò serve a trasferire dati in un'altra cartella (Cartel2) che andrà condivisa con altri utenti.
Cartel2 non dovrà essere in nessun caso modificata.
Si può proteggere la cartella da Cartel1 con password o altro senza che gli altri vadano a modificare il contenuto, il tutto fatto in automatico?
Se sì come?
Grazie in anticipo per ogni suggerimento e buona serata
Non senza ricorrere a VBA, però credo di sì, nello stesso modo come proteggi la cartella corrente. Però lo scenario è vasto: Cartel2 viene aperto o viene lavorato in remoto? è un file condiviso?
Ciao vecchio frac,
io sono in possesso di entrambe le cartelle. La condivisione avviene quando finisco di inserire i dati, poi la condivido.
Questo è il percorso che affronto: apro Cartel1 e Cartel2 >> in Cartel1 apro l'userform ed inserisco i dati che verranno trasferiti in Cartel2 >>> chiudo Cartel2 >> condivido Cartel2.
La modifica avviene solo ed esclusivamente da parte mia. Prima di chiudere Cartel2 vorrei che uscisse tipo un messaggio "Vuoi proteggere Cartel2 con password?" se clicco su sì, viene attivata la protezione e si chiude la cartella (Cartel2) e poi la condivido con altri utenti.
Nel momento in cui l'utente apre la cartella, vede il foglio tranquillamente, con i dati che ho inserito io prima.
Se fa click per modificare il foglio,cella,formula ecc deve per forza immettere la password.
Quindi il Workbook "Cartel2" è nel tuo disegno la base dati. Nessuno deve manipolare la base dati se non attraverso l'interfaccia, presente in Workbook "Cartel1", che tu distribuisci ai tuoi utenti. In pratica uno schema front-end e back-end. Non vedo bene un file di Excel come base dati 🙂 Ti suggerirei di creare un file mdb (o accdb) che contenga la tabella o le tabelle interessate, e di utilizzare una semplice connessione ADO che da Excel permetta di scrivere e leggere i dati verso il database. Nota che può andare bene qualunque tipo di tabella di database (non esiste solo Access: sqlite, sql server, ecc.).
Se invece preferisci percorrere la strada cui hai pensato, non vedo difficoltà a proteggere (e sproteggere) i fogli Excel come consueto, con Worksheet.Protect (Unprotect) e password. Immagin che si possa anche impostare la password di apertura, non solo di blocco/sblocco celle.
Ricordo comunque che è facilissimo aggirare le protezioni di Excel (dove invece molto meno facile è forzare un file Access).
Buongiorno e scusa se ieri non ho risposto, ho lasciato in quarto il pc.
Se parli di Access con me, è come se stessi bestemmiando ... scherzo naturalmente. Purtroppo Access lo uso poco e niente, preferisco rimanere su excel.
Per quanto riguarda il fatto della protezione della cartella excel (non è il massimo della protezione lo so), avresti qualche link da suggerirmi?
Magari con un esempio sarebbe fantastico, come trasformare il file di sola lettura ecc...
Ti ringrazio tantissimo e buona continuazione
Quindi il Workbook "Cartel2" è nel tuo disegno la base dati. Nessuno deve manipolare la base dati se non attraverso l'interfaccia, presente in Workbook "Cartel1", che tu distribuisci ai tuoi utenti.
Solo Cartel2 distribuisco agli utenti, Cartel1 rimane nel mio pc perchè modificherò solo io i dati.
Non so se ho spiegato bene, in tal caso sono qui.
In verità non ho pensato di farti usare Access (che ritengo sarebbe meglio, peraltro), ma di utilizzarlo solo banalmente come database. Però ho capito che i tuoi utenti devono poter aprire e consultare il file con i dati che tu hai inserito (in sola lettura però), e che Excel è l'applicativo più noto e usabile.
Magari adesso che ho tempo provo a buttare giù uno scenario di lavoro 🙂
Lavorare con un file dati condiviso non è una buona idea. Gestire gli accessi concorrenti è anche fonte di guai e comunque non puoi avere la certezza che i tuoi utenti abbiano l'ultimo dato disponibile.
Secondo me la strada da percorrere è quella classica frontend-backend:
- un file di amministrazione (gestito da te) che si occupa di inserire, modificare, rimuovere i dati;
- un file di consultazione (in locale. Ogni utente ha la propria copia e usa quella) che si occupa di accedere in sola lettura ai dati e li presenta all'utente;
- il file di database (può essere un file di Access, un file di testo, un file sqlserver, sqllite, db3 eccetera) che contiene i dati grezzi e li memorizza: gli utenti non aprono mai il file di dati ma deve essere accessibile a tutti in na cartella condivisa con i permessi almeno di lettura.
un file di amministrazione (gestito da te) che si occupa di inserire, modificare, rimuovere i dati;
Io li inserisco, non modifico e non rimuovo;
un file di consultazione (in locale. Ogni utente ha la propria copia e usa quella) che si occupa di accedere in sola lettura ai dati e li presenta all'utente;
non ho capito.. Cartel2 è sempre in aggiornamento, nel senso che i dati che aggiungo in Cartel2 da Cartel1 avviene quasi ogni giorno..
il file di database (può essere un file di Access, un file di testo, un file sqlserver, sqllite, db3 eccetera) che contiene i dati grezzi e li memorizza: gli utenti non aprono mai il file di dati ma deve essere accessibile a tutti in na cartella condivisa con i permessi almeno di lettura.
devo creare un file Access, sql ecc in modo che siano sempre aggiornati (quindi sarebbe la copia) mentre l'originale (excel) è in mio possesso?
Ho capito bene? .... Come si fa a collegare Excel ad Access in modo da aggiungere i dati e le formule che sono presenti nelle celle?
Ebbene sì... di Access non so un emerito biiiip qui mi devi aiutare tanto...
Io li inserisco, non modifico e non rimuovo
Inserire è comunque una modifica al database, no? 🙂
non ho capito
Intendevo dire: la base dati è un file separato. Tu amministri, hai la gestione della base dati dal tuo file di amministrazione. L'utente ha in mano una copia locale (un client) che può solo allacciarsi ai dati e consultarli, ma in realtà non apre la vera base di dati.
devo creare un file Access, sql ecc in modo che siano sempre aggiornati (quindi sarebbe la copia) mentre l'originale (excel) è in mio possesso?
Il file Access (per dire: ma può essere qualunque tipo di database) è una banale base dati, una volta creata la struttura della tabella non devi più aprirlo nè toccarlo. Infatti gestirai i dati dal tuo programma Excel che sarà anche l'amministratore della base dati. I tuoi utenti avranno un file Excel client, cioè cliente, fruitore, della base dati (ma l'accesso sarà per loro trasparente, perchè ci penserà Excel a connettersi alla base dati e a mostrare i dati aggiornati).
Come si fa a collegare Excel ad Access in modo da aggiungere i dati e le formule che sono presenti nelle celle?
Si fa con una connessione mediante ADO. Nota comunque che i dati passano da Excel a Access una volta calcolati, quindi non trasferisci formule ma il loro risultato.
Peraltro vorrei allegare qui due file Excel, uno di gestione e uno di consultazione (da provare stando nella stessa cartella per esempio il Desktop). Prova a vedere se in qualche modo questa è una strada più percorribile per te.
Allegati:
You must be logged in to view attached files.Grazie mille per i file ma non funzionano.
Li ho salvati entrambi in desktop, aperti entrambi, ho aggiunto i dati in Cartel1 e appena clicco sul pulsante esce un messaggio di errore che cita "Scusa ma non riusciamo a trovare il file al percorso blablabla.." evidenziando in giallo questa riga:
Set wb2 = Workbooks.Open(ThisWorkbook.Path & "\Cartel2 - CLIENT.xlsx")
E' solo un problema di nome di file. Attento agli spazi in mezzo, metti il nome preciso del file xlsx che si è scaricato (il forum carica i file allegati inserendo dei trattini al posto degli spazi). Quando ho fatto le mie prove il file si chiamava "Cartel2 - CLIENT.xlsx", adesso può darsi che il file che hai scaricato si chiami "Cartel2-CLIENT.xlsx".
O rinomini il file mettendo gli spazi o cambi il codice rimuovendoli 🙂
Ora va meglio , il problema erano gli spazi effettivamente. Che testa di cavolo .
Questa mi sembra una strada più che percorribile per le mie conoscenze.
Ora vorrei chiederti una cosa se permetti: ho notato che il file sta in condivisione giusto...è vero che excel annulla la macro per la protezione del file se lo si condivide?
In effetti ho avuto qualche problema con Protect/Unprotect dal primo Workbook verso quel file condiviso. Mi sa che non si può fare. Del resto comunque qualunque cosa succeda, tu dal tuo file sovrascrivi sempre il contenuto del secondo file, perciò non ha importanza che qualcuno scriva o cancelli qualcosa dal file condiviso, dal momento che tu con la macro lo ricostruisci partendo dai dati del tuo foglio.
Ho capito, quindi lascio stare la storia della password ... Peccato..
Comunque ora mi studio come funziona l'ADO con Access.
Ti ringrazio per avermi suggerito il metodo e buon weekend
Per aiutarti più efficacemente prova a costruire un file Excel di dati che rifletta la tua situazione reale (ma con dati fittizi). La struttura della tabella che ne deriva è praticamente fatta (senza contare che Access può importare in automatico la struttura dei dati da Excel in una tabella sua).
Ciao a tutti, scusate se mi intrometto, ho seguito la discussione e mi sono permesso di aggiungere qualche riga di codice a quello postato da VF(saluto)che immette la PW nel file client e al momento della modifica la togli, rimettendola prima di chiudere il file.Posto il codice , se ho capito, altrimenti abbiamo .....
Option Explicit Public Sub aggiorna() Dim wb1 As Workbook Dim wb2 As Workbook Dim SH As Worksheet Const PWORD As String = "pippo" Set wb1 = ThisWorkbook If MsgBox("Aggiornare il file di destinazione?", vbInformation + vbYesNo, "Nuovi dati") = vbYes Then Application.ScreenUpdating = False Application.Cursor = xlWait Set wb2 = Workbooks.Open(ThisWorkbook.Path & "\Cartel1.xlsx") Set SH = wb2.Sheets("foglio1") With SH .Unprotect Password:=PWORD wb1.Worksheets("Foglio1").Range("A4").CurrentRegion.Copy wb2.Worksheets("Foglio1").Range("A1") .Protect UserInterfaceOnly:=True, _ Password:=PWORD End With wb2.Close True Set wb2 = Nothing Application.ScreenUpdating = True Application.Cursor = xlDefault End If End Sub
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire ).Protect UserInterfaceOnly:=True, Password:=PWORD
A me non dava esito positivo, ma forse questa era la sintassi corretta (UserInterfaceOnly) 🙂
Comunque a me questa impostazione piace poco... @gret, hai forse delle formattazioni particolari sul file che tutti condividono, o puoi semplicemente mostrare in consultazione i dati come sono memorizzati?
Altra domanda, se fosse di studiare una soluzione diversa, i tuoi utenti sarebbero in grado di attivare le macro per far girare del codice?
Buongiorno a tutti,
Ciao a tutti, scusate se mi intrometto
hai fatto bene ad intrommetterti tranquillo/a .. più soluzioni ci sono meglio è .. ti ringrazio per il codice, lo proverò appena posso.
hai forse delle formattazioni particolari sul file che tutti condividono, o puoi semplicemente mostrare in consultazione i dati come sono memorizzati?
purtroppo si: celle con formule, colori, intestazioni, calcoli vari ecc
i tuoi utenti sarebbero in grado di attivare le macro per far girare del codice?
no, sono scarsi su questo punto di vista. Il loro livello è basato solo sulle formule. (credo)
Grazie per essere intervenuti
albatros54 purtroppo il codice che hai postato non funziona.
Mi esce un messaggio che dice "Metodo di protezione dell'oggetto Worksheet fallito" evidenziando questa riga:
.Protect UserInterfaceOnly:=True, _ Password:=PWORD
Ma perchè ha questo problema Excel???
Mannaggia la miseria..
-
AutoreArticoli