Protección de hojas de trabajo individuales, por usuario (Microsoft Excel)
Excel le permite proteger hojas de trabajo individuales, como ha aprendido en otras ediciones de ExcelTips. (Usted elige Herramientas | Protección | Proteger hoja). Puede usar este enfoque para proteger hojas de trabajo individuales de forma independiente, utilizando diferentes http: // nombre de usuario-contraseña .com / 14 / what-makes-a-good-password [contraseñas].
Esto significa que un usuario podría realizar cambios en una hoja de trabajo usando una contraseña y otro podría usar una contraseña diferente para realizar cambios en la otra hoja de trabajo.
Sin embargo, ¿qué sucede si desea limitar el acceso a las hojas de trabajo por completo?
¿Qué sucede si ni siquiera desea que un usuario no autorizado vea la otra hoja de trabajo? Esta necesidad es un poco más complicada de satisfacer, pero se puede hacer. El enfoque básico sería el siguiente:
-
Configure un libro de trabajo que tenga tres hojas de trabajo: una que siempre estará abierta, una para el usuario 1 y la tercera para el usuario 2.
-
Ocultar las hojas de trabajo para el usuario 1 y el usuario 2.
-
Cree un formulario que aparezca cada vez que se abre el libro de trabajo, solicitando un nombre de usuario y contraseña.
-
Cree un código de macro que desbloquee y muestre la hoja de trabajo adecuada según el nombre de usuario y la contraseña.
-
Proteja todo el libro de trabajo (Herramientas | Protección | Proteger libro de trabajo).
Los pasos 1, 2 y 5 son bastante fáciles de realizar y se han tratado en otros números de ExcelTips. El quid de este enfoque, sin embargo, son los pasos 3 y 4. Puede crear un formulario de usuario siguiendo estos pasos:
-
Presione Alt + F11 para mostrar el Editor de VBA.
-
En el Editor de VBA, elija Formulario de usuario en el menú Insertar. Aparece un nuevo formulario de usuario en blanco, junto con la caja de herramientas del formulario.
-
Usando los controles en la caja de herramientas del formulario, agregue un control TextBox donde el usuario ingresará su nombre de usuario.
-
Cambie las propiedades del control TextBox para que su Nombre sea txtUser.
-
Usando los controles en la caja de herramientas del formulario, agregue un control TextBox donde el usuario ingresará su contraseña.
-
Cambie las propiedades del control TextBox para que su Nombre sea txtPass.
-
Justo debajo de los controles TextBox, agregue un control CommandButton.
-
Cambie las propiedades del control CommandButton para que su nombre sea btnOK y su título sea correcto.
Con su formulario de usuario creado, está listo para asociar el código de macro con los controles que acaba de colocar. Asegúrese de que el formulario de usuario esté seleccionado y presione F7 para mostrar la ventana Código del formulario. La ventana puede contener una línea o dos de código generado automáticamente. Reemplace esto con el siguiente código:
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
El código anterior hace varias cosas. Observe que hay dos procedimientos: uno más largo que se ejecuta cuando el usuario hace clic en el botón Aceptar en el formulario y otro que se ejecuta cuando el formulario finaliza. Cuando el usuario hace clic en el botón Aceptar, el procedimiento verifica que la combinación del nombre de usuario y la contraseña sea correcta. Si no es así, se notifica al usuario. Si es así, el nombre de la hoja autorizada se almacena en una variable de documento y la hoja correspondiente se muestra y no está protegida.
Si desea cambiar los nombres de usuario, los nombres de las hojas y las contraseñas aceptables, puede hacerlo realizando los cambios deseados en la estructura Seleccionar caso cerca de la parte superior de este código de macro.
La segunda macro en este código (UserForm_Terminate) entra en juego si el usuario intenta simplemente descartar su formulario sin ingresar un nombre de usuario y contraseña. En este caso, si el proceso de autorización no se completó previamente, entonces el libro de trabajo simplemente se cierra.
Además del código anterior, también deberá agregar las siguientes macros al libro de trabajo. Estos abren el formulario de usuario cuando se abre el libro de trabajo y protegen la hoja de trabajo cuando se cierra el libro.
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
Cuando el usuario elige cerrar el libro de trabajo, ya ha terminado con su trabajo, las hojas de trabajo correspondientes vuelven a estar protegidas y ocultas. (Si cambia los nombres y contraseñas de las hojas de usuario, también deberá cambiarlos aquí en la estructura Seleccionar caso). La macro elimina la propiedad del documento correspondiente y guarda el libro de trabajo.
Otra macro interesante aquí es el procedimiento Workbook_SheetActivate.
Esto se incluye en caso de que un usuario intente utilizar Formato | Hoja | Mostrar para mostrar la hoja de trabajo de otro usuario. En este caso, el nombre de la hoja autorizada del usuario (almacenado en una variable de documento cuando el usuario estaba autorizado originalmente) se compara con la hoja que se muestra. Si no coincide, el usuario no puede ver la hoja de trabajo. Tenga en cuenta también que este procedimiento hace referencia a una hoja de trabajo llamada «Principal». Esta hoja de trabajo es la tercera hoja de trabajo mencionada al principio de este consejo.
Esta hoja de trabajo también es la que se muestra por primera vez cuando se abre el libro.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (1952) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.