Dam - Control de entrada con solo lectura en excel

Hola Dam.
Dentro del proyecto que estoy montando hoy tuve la primera entrega en la que me fue muy bien!!! Agradecimiento que hago extensivo a ti porque si tu ayuda y la de los expertos no fuera posible lo logrado hasta ahora.
Me pidieron si es posible generar usuarios de solo lectura, que pudieran tener acceso a consulta de información e imprimir determinados informes resúmenes. Esto es posible? Teniendo en cuenta que ya tenemos macros de control de acceso por numero de cedula.

Mediante el método de grabación realice esta prueba y veo que funcionaria un bloque general mediante una macro que tome todas las hojas, marque las celdas como bloqueadas y active la protección, pero tendríamos que revertir esto cuando accese un usuario que si tenga de rechos de e edición:

Sub Macro1()
' Cells.Select Selection.Locked = True

Selection.FormulaHidden = False

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Sheets("Hoja2").Select

Cells.Select

Selection.Locked = True

Selection.FormulaHidden = False

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

ActiveSheet.EnableSelection = xlUnlockedCells

Sheets("Hoja3").Select

Cells.Select

Selection.Locked = True

Selection.FormulaHidden = False .

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveSheet.EnableSelection = xlUnlockedCells End Sub

Pero como hago para que esto se ejecute cuando un determinado usuario ingrese?

O existe algo mas sencillo que modificar hoja por hoja teniendo en cuenta que ya llevo 32 hojas!!! :(


Quedo atento a tu respuesta.

1 respuesta

Respuesta
2

En la relación de usuarios que tienes, escribe en una columna el tipo de usuario, por ejemplo puedes poner el número 2 para los que si pueden modificar y un 3 para los que pueden visualizar

Ahora en la macro

Sub validar_usuario()
'tipo_usuario = 'poner la celda donde está el tipo de usurio
If tipo_usuario = 3 Then
    bloquear_hojas
Else
    desbloquer_hojas
End If
End Sub
‘*******************************
Sub bloquear_hojas()
'por.dam
For Each hoja In Worksheets
    Select Case hoja.Name
        Case "Hoja1", "otra" 'poner aquí las hojas que no se van a bloquer
        Case Else
            Sheets(hoja.Name).Select
            Cells.Select
            Selection.Locked = True
            Selection.FormulaHidden = False
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
    End Select
Next
End Sub

Saludos.Dam

Dam gracias por la respuesta pero antes de llevarla al proyecto quiero hacerte unas preguntas:

1. Estos dos macros las coloco en el: Private Sub Workbook_Open?

2. 'tipo_usuario = 'poner la celda donde está el tipo de usuario: para esta linea es una celda o un rango, por los usuarios según lo que me dices le coloque una columna a la derecha con un 2 y un 3 según el caso. o sea el rango "J6:J36"

3. La macro desbloquear no la veo, la debo crear? Es igual pero le cambio los True por False y viceversa: Selection.Locked = False y Selection.FormulaHidden = True?

4. Sheets(hoja.Name).Select: aca se coloca algo referente a una hoja o se deja tal cual lo escribes?

Lo voy a ir llevando al proyecto a ver que me sale.

Espero tu respuesta.

1. Si, cuando abres el libro, ya se que las llames o las acomodes en el evento Workbook_Open.

2. No tengo ni idea, de cómo tienes tu lista de usuarios, yo me imagino que tienes en una hojax, en la columna A los nombres de usuario, en la columna B, la contraseña de cada usuario, entonces en la columna C, agrega el 2 ó el 3. Luego cuando el usuario "Juan" entre a excel, buscas "Juan" en la columna A y te traes el número 2, ya con el número 2 preguntas con la macro validar_usuario

3. Tienes que crear la macro desbloquear. Realiza la grabación de la macro, para que estés seguro de desbloquear la hoja.

4. Sheets(hoja. Name). Select, así lo dejas.

Saludos. Dam

No pude....

básicamente no entiendo como la primera Sub validar_usuario() busca el usuario y lo valida en un rango....

y si ejecuto paso a paso... la segunda me arroja error en Selection.Locked = True y me detiene la macro.

El proyecto es muy grande y tiene muchas combinaciones para grabar la macro seleccionando hoja por hoja, ademas se desconfigurarian áreas que tienen celdas desbloqueadas cuando un usuario que tiene edición las vaya a trabajar.

Pensé que se podía decirle bloquea la edición en general, lo que realmente necesito es que uno usuarios solo puedan leerla pasando de hoja en hoja mediante botones que ejecutan macros de desplazamiento. Es bloquear el proyecto en general..

:(...... Voy a tener que dejarla solo con la opción de guardar con contraseña. Lo que me inquieta es que esta se ejecuta en el close. pero si quiero guardar con Control+G se guardan de todas maneras los cambios. hay alguna manera para bloquear esto?

Para pedir clave cuando quieres guardar, esta es la macro, al igual que la macro que te envié, para cerrar, debe existir la hoja “claves”. La macro también va en ThisWorkbook

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'por.dam
Worksheets("Home").Visible = True
Sheets("Home").Select
Application.EnableEvents = True
contador = 1
If MsgBox("Desea guardar los cambios", vbQuestion & vbYesNo) = vbYes Then
    Do While contador < 3
        clave = InputBox("Contraseña: ")
        fila = Application.Match(Val(clave), Sheets("claves").Columns("A"), 0)
        If Not IsError(fila) Then
            Application.EnableEvents = False
            ActiveWorkbook.Save
            Application.EnableEvents = True
            contador = 3
        Else
            If contador < 2 Then
                MsgBox "Clave errónea, intente nuevamente", vbExclamation, "OFICIOS"
                contador = contador + 1
                Cancel = True
            Else
                MsgBox "Clave errónea, No tiene autorización para guardar el libro", vbCritical, "OFICIOS"
                contador = 3
            End If
        End If
    Loop
Else
    Cancel = True
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas