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:

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

  2. Ocultar las hojas de trabajo para el usuario 1 y el usuario 2.

  3. Cree un formulario que aparezca cada vez que se abre el libro de trabajo, solicitando un nombre de usuario y contraseña.

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

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

  1. Presione Alt + F11 para mostrar el Editor de VBA.

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

  3. Usando los controles en la caja de herramientas del formulario, agregue un control TextBox donde el usuario ingresará su nombre de usuario.

  4. Cambie las propiedades del control TextBox para que su Nombre sea txtUser.

  5. Usando los controles en la caja de herramientas del formulario, agregue un control TextBox donde el usuario ingresará su contraseña.

  6. Cambie las propiedades del control TextBox para que su Nombre sea txtPass.

  7. Justo debajo de los controles TextBox, agregue un control CommandButton.

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