Introducir dato en celdas EXCEL y no PODER modificar

He creado en una hoja excel los datos básicos de una empresa y en las demás hojas hay datos y tablasy fórmulas relacionado a la empresa, el archivo vacío sin datos de solo fórmulas se entrega por cada mes el 1 primer día, obligatoriamente se pondrá los datos el 1 primer día y por única vez. No permitiendo copiar el archivo y modificar los datos a meses anteriores.
Quisiera saber si es posible al ingresar los datos en celda establecidas y se bloquee automáticamente a no modificar.
Gracias.
{"Lat":-13.9234038977233,"Lng":-73.125}
Respuesta
1

Microsoft Excel

wilmer12el 6 nov. 10

Introducir dato en celdas EXCEL y no PODER modificar

He creado en una hoja excel los datos básicos de una empresa y en las demás hojas hay datos y tablasy fórmulas relacionado a la empresa, el archivo vacío sin datos de solo fórmulas se entrega por cada mes el 1 primer día, obligatoriamente se pondrá los datos el 1 primer día y por única vez. No permitiendo copiar el archivo y modificar los datos a meses anteriores.
Quisiera saber si es posible al ingresar los datos en celda establecidas y se bloquee automáticamente a no modificar.
Gracias.

Ver mapa

   

2 RESPUESTAS

RESPUESTA

2

granpeke

granpeke, Ingeniero civil informático

Es posible lo que pides, pero necesitas macros, por tanto, necesitarías ponerle clave a las macros y a la hoja.
Como observación, es necesario que de partida, esté toda la hoja (todas las celdas) bloqueada, incluso las celdas que deseas que se puedan modificar. Estas celdas se desbloquearían con la macro, de esta forma, si alguien deshabilitara las macros en su PC, no podría modificar las hojas.
La forma que utilizaremos para desbloquear una celda, es cuando esta sea seleccionada, si la celda es una de las editables, se desbloqueará si es que aun no tiene valor.
Vamos a crear un procedimiento que se llame proteger, que servirá para bloquear/desbloquear la celda:
StrCelda: Nombre de la celda a tratar
bloq: True para bloquear, false para desbloquear
Sub proteger(strCelda As String, bloq As Boolean)
    Dim pass As String
    pass = "password_de_tu_hoja"
    ActiveSheet.Unprotect pass
    ActiveSheet.Range(strCelda).Locked = bloq
    ActiveSheet.Protect Password:=pass, DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Supongamos que B5 es una celda editable, en la sección de código de la hoja debes poner:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$B$5" Then
        proteger Target.Address, (Target.Value <> "")
    End If
End Sub

Cuando se selecciona una celda, evalúa si es la B5, y si es, llama al procedimiento proteger, que se encargará de desproteger la celda en caso de que esté vacía, si tiene un valor, permanecerá bloquea o la bloqueará.
Espero que te sirva. Cualquier consulta, intentaré resolvértela.

el 7 nov. 10 

wilmer12

Disculpe pero se poco de macro, mejor si te doy el ejemplo, ahí va:
Hoja1 esta los datos básicos:
celda A10 = CIA PEPITO
celda a11= 31/12/2009
celda A12= CPM02-2009
Hojas 2, 3, 4 hay tablas y fórmulas
Al abrir el archivo las celdas A10, 11 y 12 están vacíos y al ingresar una sola vez c/u de los tres se bloqueen automáticamente a no poder modificar.
Desde ya agradezco tu ayuda.

el 8 nov. 10 

granpeke

Las consideraciones siguen siendo las mismas, sólo modificaremos el segundo evento para cumplir con tu requerimiento específico.
Entonces, en la sección de código de la hoja en la que se deben bloquear las celdas debes poner:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$10" OR _
       Target.Address = "$A$11" OR _
       Target.Address = "$A$12" Then
           proteger Target.Address, (Target.Value <> "")
    End If
End Sub

Cómo puedo llamar a la hoja1 o la hoja 2 donde agregaría ese código.

¿Con esta macro con que hoja estaría trabajando?

¿Hoja1, hoja2, hoja3?

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "$A$10" OR _
       Target.Address = "$A$11" OR _
       Target.Address = "$A$12" Then
           proteger Target.Address, (Target.Value <> "")
    End If
End Sub

------

¿Qué tendría que agregar a esta macro para asignarlo el nombre de la hoja?.

2 respuestas más de otros expertos

Respuesta
2
Es posible lo que pides, pero necesitas macros, por tanto, necesitarías ponerle clave a las macros y a la hoja.
Como observación, es necesario que de partida, esté toda la hoja (todas las celdas) bloqueada, incluso las celdas que deseas que se puedan modificar. Estas celdas se desbloquearían con la macro, de esta forma, si alguien deshabilitara las macros en su PC, no podría modificar las hojas.
La forma que utilizaremos para desbloquear una celda, es cuando esta sea seleccionada, si la celda es una de las editables, se desbloqueará si es que aun no tiene valor.
Vamos a crear un procedimiento que se llame proteger, que servirá para bloquear/desbloquear la celda:
StrCelda: Nombre de la celda a tratar
bloq: True para bloquear, false para desbloquear
Sub proteger(strCelda As String, bloq As Boolean)
    Dim pass As String
    pass = "password_de_tu_hoja"
    ActiveSheet.Unprotect pass
    ActiveSheet.Range(strCelda).Locked = bloq
    ActiveSheet.Protect Password:=pass, DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Supongamos que B5 es una celda editable, en la sección de código de la hoja debes poner:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$B$5" Then
        proteger Target.Address, (Target.Value <> "")
    End If
End Sub

Cuando se selecciona una celda, evalúa si es la B5, y si es, llama al procedimiento proteger, que se encargará de desproteger la celda en caso de que esté vacía, si tiene un valor, permanecerá bloquea o la bloqueará.
Espero que te sirva. Cualquier consulta, intentaré resolvértela.
Disculpe pero se poco de macro, mejor si te doy el ejemplo, ahí va:
Hoja1 esta los datos básicos:
celda A10 = CIA PEPITO
celda a11= 31/12/2009
celda A12= CPM02-2009
Hojas 2, 3, 4 hay tablas y fórmulas
Al abrir el archivo las celdas A10, 11 y 12 están vacíos y al ingresar una sola vez c/u de los tres se bloqueen automáticamente a no poder modificar.
Desde ya agradezco tu ayuda.
Las consideraciones siguen siendo las mismas, sólo modificaremos el segundo evento para cumplir con tu requerimiento específico.
Entonces, en la sección de código de la hoja en la que se deben bloquear las celdas debes poner:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$10" OR _
       Target.Address = "$A$11" OR _
       Target.Address = "$A$12" Then
           proteger Target.Address, (Target.Value <> "")
    End If
End Sub

Si tienes alguna complicación, coméntamela.
Excelente, ya funciona, pero hay algo ahí.
Al no permitirme modificar los datos, pero voy a ver el código de la hoja y ahí esta la respuesta de la PASSWORD.
Hay alguna forma de que no se pueda ver el código de la hoja.
Muchas gracias eh.
Saludos de Perú.
Tienes que ponerle contraseña a la sección de código.
En la sección de código te vas a Herramientas/Propiedades de VBAProyect...
Pestaña Protección, marcas las casilla Bloquear proyecto para visualización y le agregas una contraseña.
Sr o Srta. GRANPEKE
Muchas gracias por tu ayuda, hay tantas cosas que uno no sabe. Porafor si hay alguna página o libro para bajar y aprender sobre el excel avanzado.
Muchos saludos de Perú
Buen día.
Respuesta

Muy elegante solución, muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas