Quiero proteger las celdas que tienen formulas con macro para que no se borren en excel 2010

Deseo saber como proteger mis celdas con formulas y datos que se utilizan para ejecutar el macro espero su ayuda muchas gracias

Móndulo 1
Sub REGISTRAR()
If Range("c5").Value = "" Or Range("j17").Value = 0 Then Exit Sub
If Range("g4").Value = "FACTURA DE VENTA" Then
With Sheets("Reg. Ventas").Range("a65536").End(xlUp)
.Offset(1, 0) = CDate(Range("j7").Value)
.Offset(1, 1) = CDate(Range("j7").Value + Range("b21").Value)
.Offset(1, 2) = "'0" & 1
.Offset(1, 3) = "'00" & Range("g5").Text
.Offset(1, 4) = "'000" & Range("j5").Text
.Offset(1, 5) = "'0" & 6
.Offset(1, 6) = Range("c5").Text
.Offset(1, 7) = Range("c6").Text
.Offset(1, 8) = Range("j17").Value
.Offset(1, 9) = Range("j18").Value
.Offset(1, 10) = Range("j19").Value
.Offset(1, 11) = Range("B19").Value
.Offset(1, 12) = Range("j19").Value - Range("B19").Value
Range("C5:D5,B9:B15,C9:C15,B19:D19,B21").ClearContents
Range("J5").Value = Range("J5").Value + 1
MsgBox "La factura fue registrada Exitosamente", vbInformation, "Excel Negocios por Gustavo Sebastiani"
End With
Else
With Sheets("Reg. Compras").Range("a65536").End(xlUp)
.Offset(1, 0) = CDate(Range("j7").Value)
.Offset(1, 1) = CDate(Range("j7").Value + Range("b21").Value)
.Offset(1, 2) = "'0" & 1
.Offset(1, 3) = "'00" & Range("g5").Text
.Offset(1, 4) = "'000" & Range("j5").Text
.Offset(1, 5) = "'0" & 6
.Offset(1, 6) = Range("c5").Text
.Offset(1, 7) = Range("c6").Text
.Offset(1, 8) = Range("j17").Value
.Offset(1, 9) = Range("j18").Value
.Offset(1, 10) = Range("j19").Value
.Offset(1, 11) = Range("B19").Value
.Offset(1, 12) = Range("j19").Value - Range("B19").Value
Range("C5:D5,B9:B15,C9:C15,B19:D19,B21").ClearContents
Range("J5").Value = Range("J5").Value + 1
MsgBox "La factura fue registrada Exitosamente", vbInformation, "Excel Negocios por Gustavo Sebastiani"
End With
End If
End Sub
Sub LIMPIAR()
Range("C5:D5,B9:B15,C9:C15,B19:D19,B21").ClearContents
End Sub
Móndulo 2
Sub Macro1()
'
' Macro1 Macro
'
'
Range("J5,C5:D5,B9:B15,C9:C15,B19:D19,B21").ClearContents
End Sub

1 respuesta

Respuesta
1

Las celdas ya vienen 'bloqueadas' de modo predeterminado. Cuando protejas la hoja ya verás que esas celdas no pueden modificarse.

Entonces, podrás dejar algunas celdas 'desbloqueadas' para insertar datos con tu macro y en ese caso no hay nada que agregar al código, solo tenés que proteger tu hoja.

Pero si también querés proteger todos los datos, en la misma macro tendrás que desproteger la hoja al inicio y al final volverla a proteger.

Por ej:

Sub REGISTRAR()

Sheets("Reg. Ventas").Unprotect

y luego de todo el pase, antes del End Sub esta otra:

Sheets("Reg. Ventas"). Protect

Esto en cada subrutina donde modifiques el valor de las celdas, si están bloqueadas.

Analiza qué será lo mejor en tu caso y si necesitas que te agregue algo más, presiona el botón de Aclaraciones, sino el de Finalizar.

Muchas Gracias por responder pero las indicaciones que me dio protege toda La hoja solo quiero proteger las celdas C10,C11,E19:E25,K19:K25

Bien, ... pero te queda claro, ¿qué las celdas solo quedarán protegidas si se protege la hoja?

Según comprendo, tu hoja debe dejar las celdas C10, C11, E19:E25, K19:K25... y quizás también las de títulos (generalmente las incluimos pero dejo a tu criterio).

Entonces, seleccioná la hoja desde el extremos superior izquierdo (la intersección entre fila 1 y col A).

Estando toda la hoja seleccionada, desde menú Formato, Proteger, quitale el tilde a la opción Bloqueo,.

Ahora seleccioná las celdas C10, C11, E19:E25, K19:K25 y desde el mismo formato tildá la opción de Bloqueo y también la de Ocultar (esta es opcional).

Ahora protegé la hoja, la contraseña es opcional.

Ya no necesitas colocar en este código las líneas de protección.

Aclaración:

En la instrucción de limpieza, no debes incluir las celdas protegidas.

Por ej:

Range("J5, C5:D5, B9:B15,C9:C15, B19:D19, B21"). ClearContents

En el rango C9:C15 están incluidas las celdas protegidas: C10 y C11 y eso te dará error.

En esa instrucción no debes incluirlas.

La otra opción, la de desproteger y volver a proteger al final, lo que hará es que esas celdas se limpien y esa no es la idea.

Entonces tu línea debe ser algo así:

Range("J5, C5:D5, B9:B15,C9, C12:C15, B19:D19, B21"). ClearContents

Sdos

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas