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:

  1. 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.

  2. Nasconde i fogli di lavoro per l’utente 1 e l’utente 2.

  3. Crea un modulo che viene visualizzato ogni volta che viene aperta la cartella di lavoro, chiedendo un nome utente e una password.

  4. Creare un codice macro che sblocca e visualizza il foglio di lavoro corretto in base al nome utente e alla password.

  5. 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:

  1. Premi Alt + F11 per visualizzare l’editor VBA.

  2. Nell’editor VBA, scegli Modulo utente dal menu Inserisci. Viene visualizzato un nuovo modulo utente vuoto, insieme alla casella degli strumenti del modulo.

  3. Utilizzando i controlli nella casella degli strumenti del modulo, aggiungi un controllo TextBox in cui l’utente immetterà il proprio nome utente.

  4. Modificare le proprietà per il controllo TextBox in modo che il suo nome sia txtUser.

  5. Utilizzando i controlli nella casella degli strumenti del modulo, aggiungi un controllo TextBox in cui l’utente immetterà la password.

  6. Modificare le proprietà per il controllo TextBox in modo che il suo nome sia txtPass.

  7. Appena sotto i controlli TextBox, aggiungi un controllo CommandButton.

  8. 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.