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.