Como proteger los datos despues de introducirlos

5 envíos / 0 nuevos
Último envío
Luis Huete
Imagen de Luis Huete
Offline
última acción: Hace 11 años 6 meses
alta: 29/04/2012 - 21:38
Puntos: 105
Como proteger los datos despues de introducirlos

Hola.

Necesito saber como proteger mis datos al cerrar el libro de trabajo, para que no puedan ser modificados, al mismo tiempo al abrirlo las celdas en blanco este disponible para introducir nuevos datos

Gracias 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 día 3 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Como proteger los datos despues de introducirlos

Hola.

Excel permite proteger la hoja de cálculo. cuando proteges la hoja las celdas que estén bloqueadas no permiten modificar los datos, mientras que las celdas desbloqueadas si pueden ser editadas.

las opciones para bloquear o no una celda están en las propiedades de formato de celdas

bloquear celdas al proteger la hoja

Tu solución debería basarse en esto:

-tener desbloqueadas las celdas donde quieres permitir la entrada de datos

-bloquear las celdas con datos existentes, para que no se puedan modificar

-activar la protección de la hoja para que se tengan en cuenta estos bloqueos (en el menú contextual de la etiqueta de la hoja tienes la opción de "Proteger hoja...").

 

El problema es que la hoja debe desprotegerse para poder añadir o quitar nuevas celdas bloqueadas, además imagino que no convencerás a los usuarios de la hoja para que den estos pasos cada vez que editen la hoja y se protejan frente a sí mismos.

 

Para automatizar esto podrías crear una macro que desproteja la hoja, bloquee las nuevas celdas con información y vuelva a proteger la hoja, y todo esto por ejemplo antes de guardar el libro.

 

te doy una pista

Selection.Locked  según sea true o false bloquea o desbloquea la selección

ActiveSheet.Protect protege la hoja puedes poner una contraseña y establecer qué quieres bloquear y qué no.

ActiveSheet.Unprotect la desprotege

 

graba una macro mientras lo haces a mano, para tener una idea de cómo podría ser tu macro.

 

------
Ya sé Excel, pero necesito más.

xoan ninguen
Imagen de xoan ninguen
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 19/01/2011 - 10:03
Puntos: 835
Re: Como proteger los datos despues de introducirlos

Deberías introducir el código de protección bien en:

- el módulo "ThisWorkbook" en una subrutina llamada sub Workbook_Close()

- en un módulo corriente y moliente con una subrutina llamada Auto_Close()

 

Bueno, pues donde quiera que lo pongas, deberías establecer el siguiente código:

(Lo tengo que dejar aquí, son las 9:00 y me voy al trabajo... queda pendiente que no asigna bien el rango a proteger... pero la idea y el desarrollo está casi completo, con todas las funciones y llamadas expuestas, a falta de solucionar ese problema con el interruptor correcto que protege la hoja)

 

Sub Auto_Close()

    Dim xlLibroTrabajo As Excel.Workbook

    Dim xlHoja As Excel.Worksheet

    Dim rgRango As Excel.Range

    Dim rgRangoDesprotegido As Excel.Range

    Dim celda As Excel.Range

    Dim lgHoja As Long

    Dim lgUltimaFila As Long

    Dim lgUltimaColumna As Long

    Dim Pass As String

 

    Pass = VBA.InputBox("Introduzca la clave para desproteger la hoja", "Contraseña", "a")

    Set xlLibroTrabajo = ActiveWorkbook

    For lgHoja = 1 To Worksheets.Count

        Set xlHoja = Worksheets(lgHoja) 'También podrías quitar este For...Next y centrarte sólo en Set xlHoja = Worksheets("NOMBREHOJA")

        With xlHoja

            .Unprotect (Pass)

            Call fUltimaPosicion(lgUltimaFila, lgUltimaColumna, xlLibroTrabajo, xlHoja) 'busca la última fila y la última columna con datos (puede ser tedioso)

            Set rgRango = .Range(.Cells(1, 1), .Cells(lgUltimaFila, lgUltimaColumna))

            

            For Each celda In rgRango.Cells

                'Que recorra todas las celdas... y si están vacías, que las deje sin proteger

                If celda.Value = vbNullString Then

                    If rgRangoDesprotegido Is Nothing Then Set rgRangoDesprotegido = celda

                    Set rgRangoDesprotegido = Union(rgRangoDesprotegido, celda)

                End If

            Next celda

            rgRangoDesprotegido.Select

            .Protection.AllowEditRanges.Add Title:="RangoDesprotegido", Range:=rgRangoDesprotegido

            Set rgRango = Nothing

            Set rgRangoDesprotegido = Nothing

            .Protect Password:=Pass, DrawingObjects:=True, Contents:=True, Scenarios:=True

        End With

    Next lgHoja

    Set xlLibroTrabajo = Nothing

 

End Sub

 

Public Function fUltimaPosicion(ByRef lgFilaUltima As Long, ByRef lgColumnaUltima As Long, _

                                Optional ByVal xlLibro As Excel.Workbook, _

                                Optional ByVal xlHoja As Excel.Worksheet) As Long

    Dim bDesasignaLibro As Boolean, bDesasignaHoja As Boolean

    

    If xlLibro Is Nothing Then Set xlLibro = ActiveWorkbook: bDesasignaLibro = True

    If xlHoja Is Nothing Then Set xlHoja = xlLibro.ActiveSheet: bDesasignaHoja = True

    

    Dim lgColorPrevio As Long

    With xlHoja

        If .UsedRange.Rows.Count <> .Cells.SpecialCells(xlCellTypeLastCell).Row Or _

           .UsedRange.Columns.Count <> .Cells.SpecialCells(xlCellTypeLastCell).Column Then

            lgColorPrevio = .Cells(1, 1).Interior.ColorIndex

            .Cells(1, 1).Interior.ColorIndex = 2 'Para evitar los problemas con USEDRANGE

            lgFilaUltima = .UsedRange.Rows.Count

            lgColumnaUltima = .UsedRange.Columns.Count

            .Cells(1, 1).Interior.ColorIndex = lgColorPrevio

        Else

            lgFilaUltima = .UsedRange.Rows.Count

            lgColumnaUltima = .UsedRange.Columns.Count

        End If

    End With

    

    If bDesasignaHoja Then Set xlHoja = Nothing

    If bDesasignaLibro Then Set xlLibro = Nothing

 

End Function

-----------------------------------------------------------------

www.TrazEX.com (soluciones sobre Excel)

visitante (no verificado)
Imagen de visitante
Re: Como proteger los datos despues de introducirlos

Gracias, precisamente es lo que quiero evitar, estar protegiendo y desprotegiendo los datos, pues he visto algunas macros que hacen esto protegiendo el dato una vez introducido el dato, sin embargo la inconveniente es que si el dato lo introdujo mal, ya no lo puede corregir por que se bloquea la celda, por eso es que quisiera ver la posibilidad de que una vez cerrado el libro, los datos queden protegidos y no se puedan modificar, al abrirlo nuevamente, pero si este disponibles nuevas celdas para introducir nuevos datos.

Saludes y buen día 

visitante (no verificado)
Imagen de visitante
Re: Como proteger los datos despues de introducirlos

Gracias.

Probare la opcion, aver si me resulta, me parece muy interesante esta opcion.

Saludes y te cuento como me va.