Protezione dei singoli fogli di lavoro, per utente (Microsoft Excel)
Excel ti consente di proteggere singoli fogli di lavoro, come hai appreso in altri numeri di ExcelTips. (scegli Strumenti | Protezione | Proteggi foglio). Puoi utilizzare questo approccio per proteggere i singoli fogli di lavoro in modo indipendente, utilizzando http: // nome utente-password diversi .com / 14 / cosa-crea-una-buona-password [password].
Ciò significa che un utente potrebbe apportare modifiche a un foglio di lavoro utilizzando una password e un altro potrebbe utilizzare una password diversa per apportare modifiche all’altro foglio di lavoro.
E se volessi limitare completamente l’accesso ai fogli di lavoro, tuttavia?
E se non vuoi nemmeno che un utente non autorizzato veda l’altro foglio di lavoro? Questa esigenza è un po ‘più complicata da soddisfare, ma può essere eseguita. L’approccio di base sarebbe il seguente:
-
Imposta una cartella di lavoro che abbia tre fogli di lavoro: uno che sarà sempre aperto, uno per l’utente 1 e il terzo per l’utente 2.
-
Nasconde i fogli di lavoro per l’utente 1 e l’utente 2.
-
Crea un modulo che viene visualizzato ogni volta che viene aperta la cartella di lavoro, chiedendo un nome utente e una password.
-
Creare un codice macro che sblocca e visualizza il foglio di lavoro corretto in base al nome utente e alla password.
-
Proteggi l’intera cartella di lavoro (Strumenti | Protezione | Proteggi cartella di lavoro).
I passaggi 1, 2 e 5 sono abbastanza facili da eseguire e sono stati trattati in altri numeri di ExcelTips. Il punto cruciale di questo approccio, tuttavia, sono i passaggi 3 e 4. Puoi creare un modulo utente seguendo questi passaggi:
-
Premi Alt + F11 per visualizzare l’editor VBA.
-
Nell’editor VBA, scegli Modulo utente dal menu Inserisci. Viene visualizzato un nuovo modulo utente vuoto, insieme alla casella degli strumenti del modulo.
-
Utilizzando i controlli nella casella degli strumenti del modulo, aggiungi un controllo TextBox in cui l’utente immetterà il proprio nome utente.
-
Modificare le proprietà per il controllo TextBox in modo che il suo nome sia txtUser.
-
Utilizzando i controlli nella casella degli strumenti del modulo, aggiungi un controllo TextBox in cui l’utente immetterà la password.
-
Modificare le proprietà per il controllo TextBox in modo che il suo nome sia txtPass.
-
Appena sotto i controlli TextBox, aggiungi un controllo CommandButton.
-
Modificare le proprietà per il controllo CommandButton in modo che il suo nome sia btnOK e la sua didascalia sia OK.
Una volta creato il modulo utente, sei pronto per associare il codice macro ai controlli che hai appena posizionato. Assicurati che il modulo utente sia selezionato e premi F7 per visualizzare la finestra del codice per il modulo. La finestra può contenere una o due righe di codice generato automaticamente. Sostituiscilo con il codice seguente:
Dim bOK2Use As Boolean Private Sub btnOK_Click() Dim bError As Boolean Dim sSName As String Dim p As DocumentProperty Dim bSetIt As Boolean bOK2Use = False bError = True If Len(txtUser.Text) > 0 And Len(txtPass.Text) > 0 Then bError = False Select Case txtUser.Text Case "user1" sSName = "u1sheet" If txtPass.Text <> "u1pass" Then bError = True Case "user2" sSName = "u2sheet" If txtPass.Text <> "u2pass" Then bError = True Case Else bError = True End Select End If If bError Then MsgBox "Invalid User Name or Password" Else 'Set document property bSetIt = False For Each p In ActiveWorkbook.CustomDocumentProperties If p.Name = "auth" Then p.Value = sSName bSetIt = True Exit For End If Next p If Not bSetIt Then ActiveWorkbook.CustomDocumentProperties.Add _ Name:="auth", LinkToContent:=False, _ Type:=msoPropertyTypeString, Value:=sSName End If Sheets(sSName).Visible = True Sheets(sSName).Unprotect (txtPass.Text) Sheets(sSName).Activate bOK2Use = True Unload UserForm1 End If End Sub Private Sub UserForm_Terminate() If Not bOK2Use Then ActiveWorkbook.Close (False) End If End Sub
Il codice sopra fa diverse cose. Si noti che esistono due procedure: una più lunga che viene eseguita quando l’utente fa clic sul pulsante OK nel modulo e un’altra che viene eseguita quando il modulo viene terminato. Quando l’utente fa clic sul pulsante OK, la procedura verifica che la combinazione di nome utente e password sia corretta. Se non lo è, l’utente viene informato. Se lo è, il nome del foglio autorizzato viene memorizzato in una variabile del documento e il foglio appropriato viene visualizzato e non protetto.
Se si desidera modificare i nomi utente, i nomi dei fogli e le password accettabili, è possibile farlo apportando le modifiche desiderate nella struttura Seleziona caso vicino alla parte superiore di questo codice macro.
La seconda macro in questo codice (UserForm_Terminate) entra in gioco se l’utente cerca di chiudere semplicemente il modulo senza inserire un nome utente e una password. In questo caso, se il processo di autorizzazione non è stato completato in precedenza, la cartella di lavoro viene semplicemente chiusa.
Oltre al codice precedente, dovrai anche aggiungere le seguenti macro alla cartella di lavoro stessa. Questi aprono il modulo utente quando viene aperta la cartella di lavoro e proteggono il foglio di lavoro quando la cartella di lavoro viene chiusa.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Worksheet Dim bSaveIt As Boolean bSaveIt = False For Each w In Worksheets If w.Visible Then Select Case w.Name Case "u1sheet" w.Protect ("u1pass") w.Visible = False bSaveIt = True Case "u2sheet" w.Protect ("u2pass") w.Visible = False bSaveIt = True End Select End If Next w If bSaveIt Then ActiveWorkbook.CustomDocumentProperties("auth").Delete ActiveWorkbook.Save End If End Sub Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name <> "Main" Then If Sh.Name <> ActiveWorkbook.CustomDocumentProperties("auth").Value Then Sh.Visible = False MsgBox "You don't have authorization to view that sheet!" End If End If End Sub
Quando l’utente sceglie di chiudere la cartella di lavoro, ha terminato il proprio lavoro, i fogli di lavoro applicabili vengono nuovamente protetti e nascosti. (Se si modificano i nomi e le password dei fogli utente, sarà necessario modificarli anche qui nella struttura Seleziona caso.) La macro quindi elimina la proprietà del documento appropriata e salva la cartella di lavoro.
Un’altra macro interessante qui è la procedura Workbook_SheetActivate.
Questo è incluso nel caso in cui un utente cerchi di utilizzare Format | Foglio | Scopri per mostrare il foglio di lavoro di un altro utente. In questo caso, il nome del foglio autorizzato dell’utente (memorizzato in una variabile del documento quando l’utente era originariamente autorizzato) viene confrontato con il foglio visualizzato. Se non corrisponde, all’utente non è consentito visualizzare il foglio di lavoro. Notare, inoltre, che questa procedura fa riferimento a un foglio di lavoro denominato “Main”. Questo foglio di lavoro è il terzo foglio di lavoro menzionato all’inizio di questo suggerimento.
Questo foglio di lavoro è anche quello visualizzato per primo all’apertura della cartella di lavoro.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (1952) si applica a Microsoft Excel 97, 2000, 2002 e 2003.