Como puedo bloquear una hoja de cálculo para que solo se puedan introducir datos en ella a través de formularios.

Tengo una hoja de excel a la cual ingreso y modifico datos a través de dos formularios respectivamente. El usuario no debe de poder borrar o modificar los datos de la hoja, solo debe de poder hacerlo usando los formularios, es decir la hoja con los registros introducidos debe de quedar protegida. Si alguien pudiera ayudarme a resolver esta cuestión no sabría como agradecérselo.

1 respuesta

Respuesta
3

H o l a:

Primero, todas las celdas deberán estar bloquedas.

Segundo, la hoja debe estar protegida, con un password.

Entonces, cuando vayas a pasar la información que tienes en el formulario a la hoja, tienes que desproteger la hoja y después de pasar los datos, vuelves a proteger la hoja, por ejemplo:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    'Pasar los datos a la hoja
    'Desproteger la hoja
    Sheets("Hoja1"). Unprotect "abc"
    '
    'Pasar los datos a la hoja
    Sheets("Hoja1").Range("A5") = TextBox1
    Sheets("Hoja1").Range("B7") = TextBox2
    '
    'Proteger nuevamente la hoja
    Sheets("Hoja1"). Protect "abc"
End Sub

Son datos de ejemplo, los debes cambiar por tus datos.

Cambia "abc" por el password que desees.


':)
S a l u d o s . D a n t e A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

¡Gracias! Estimado Dante, es usted un verraco del excel, es justo lo que necesitaba y funciona a la perfección. Mil gracias!

Estimado Dante. He detectado un pequeño fallo. El usuario, a pesar de tener la hoja bloqueada y debe de poder hacer autofiltros.

¿Es posible solventar esto con código vba?

Nota:Cuando se ejecuta el programa (desproteje, trabaja, protege) se pierde la opción "Usar autofiltro" de la opción Proteger Hoja de la barra de Herramientas.

Saludos.

Te anexo el código actualizado:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    'Pasar los datos a la hoja
    'Desproteger la hoja
    Sheets("Hoja1"). Unprotect "abc"
    '
    'Pasar los datos a la hoja
    Sheets("Hoja1").Range("A5") = TextBox1
    Sheets("Hoja1").Range("B7") = TextBox2
    '
    'Proteger nuevamente la hoja
    Sheets("Hoja1").Protect "abc", DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub

Grande Dante! Nuevamente mis felicitaciones, por ser un verraco y un experto en excel y vba. El código funciona y resuelve a la perfección la problemática expuesta. Mi más cordial enhorabuena y gratitud.

Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas