Macro para bloquear las 12 primeras hojas de mi libro

Son dos macros en un módulo, una para bloquearla y otra para desbloquearla. La idea es que haga lo anterior dicho solamente a las 12 primeras hojas y que se pueda modificar en un futuro, es decir, si en algún momento es hasta las 13 hojas, que sea fácil de modificar. Debe de ejecutarse con varios parámetros habilitados aparte de los que vienen por defecto: "Seleccionar celdas bloqueadas" y "Seleccionar celdas desbloqueadas".

2 respuestas

Respuesta
2

Solo deseo aportar un comentario atenta a que mencionas 'y que se pueda modificar en un futuro,

La instrucción Sheets(índice) toma las hojas en el orden en que se encuentran las pestañas.

Por lo tanto el bucle For i = 1 to 12 es correcto para recorrer las 12 hojas tal como muestras en tu imagen inicial.

Pero no debes agregar hojas ni delante ni entre los meses, salvo que también las quieras incluir en las macros.

Por ejemplo, en la siguiente imagen las macros solo trabajarán con hojas '2019' hasta Noviembre, considerando las primeras 12 hojas.

¡Gracias! Muy buen aporte Elsa.

Elsa... Me gustaría hacerte una pregunta:

Yo puse la macro que hizo Andy dentro de dos botones en un formulario, para abrir ese formulario hay que poner una contraseña en otro formulario, ¿cómo puedo hacer para que las ventanas no me abran al mismo tiempo? La idea es que cuando le de a "Aceptar" en el primer formulario, se cierre y me abra el otro formulario para proteger y desproteger las 12 primeras hojas.

Porque tenía entendido que al agregar el parametro "Unload Me" se cerraría al darle aceptar.

Deja por favor una nueva consulta en el tablón y así te lo explico sin mezclar los temas.

Sdos!

Respuesta
1
Dim i As Integer
For i = 1 To 12
    Sheets(i).Protect Password:="PASS", DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFiltering:=True
Next i

..

Recuerda que falta una para desproteger Andy, ¿puedes?

Para desproteger las 12 hojas a la vez, es igual, solo hay que cambiar la palabra .Protect por .Unprotect

Desde el mes pasado estas con eso, ¿cómo aun no te lo aprendes? XD

Dim i As Integer
For i = 1 To 12
    Sheets(i).Unprotect "PASS"
Next i

Best

Andy, tengo entendido que esta plataforma se compone de dos personas, "Los expertos como tú" y las personas que buscan ayuda, sí, AYUDA, si hacen una pregunta se suponen es porque ya intentaron todo y no conocen la solución, por eso acudí a esta página... Si yo te recordé lo de desbloquear es porque ya lo había puesto así y no me funcionó, por eso pregunté. El hecho de que tengas conocimiento no significa que los demás sean cuerpos llenos de grasa con un cerebro tamaño hormiga. :*

Carlos Arrocha ¿Me puedes ayudar en esto? Por lo visto eres de los pocos con deseo de ayudar a los demás sin ningún tipo de reparo. 

Te lo había dicho en broma, a mi me encanta ayudar, y siempre explico más de lo que debería.

Debes seguir las instrucciones cuando te las damos.

Te dije que el código es:

Dim i As Integer
For i = 1 To 12
    Sheets(i).Unprotect "PASS"
Next i

Y tu pusiste:

Dim i As Integer
For i = 1 To 12
    Sheets(i).Unprotect Password:="PASS", DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFiltering:=True
Next i

Notas la diferencia?

El método "Unprotect" solo lleva un parámetro, la contraseña, los demás no existen, por eso te da error.

Andy.

De todas formas, quiero aclararte algo:

1- Recuerda que no soy un gran conocedor del tema.

2- Yo hice una pregunta sobre dos macros... Tú solo me enviaste una (La de proteger), entonces, te recordé que faltaba otra macro y me dijiste exactamente esto:

Para desproteger las 12 hojas a la vez, es igual, solo hay que cambiar la palabra .Protect por .Unprotect

Desde el mes pasado estas con eso, ¿cómo aun no te lo aprendes? XD

Dim i As Integer
For i = 1 To 12
    Sheets(i).Unprotect "PASS"
Next i

Best

OJO: "Para desproteger las 12 hojas a la vez, es igual, solo hay que cambiar la palabra .Protect por .Unprotect". Dijiste después de la primera coma que es igual, yo entendí que simplemente había que agregarle "Unprotec" que fue exactamente lo que hice antes de consultar en esta página, por ese le respondí como lo hice. Si tienes tantas ganas de ayudar debiste de decime:

Dim i As Integer
For i = 1 To 12
Sheets(i).Unprotect "PASS"
Next i

Coloca esta macro y listo, pero me dijiste que es igual, que solo había que cambiarle una palabra, no es que yo no siga instrucciones, es que tu orgullo no te deja ver más allá de tu propia nariz.

Saludos.

Vale, tiene usted toda la razón. Mala mía, disculpa. Espero que ahora te haya funcionado. Ten en cuenta el comentario de Elsa, es importante.

Gracias, no hay problema, ya pasó.

En cuanto a la macro, me da un error, no sé por qué, me funcionó la primera vez y ya.

Puse la misma contraseña y me hace lo mismo (4658123907).

La contraseña que estas usando para proteger, no es la misma que estas usando para desproteger.

En la macro de Proteger, tienes

.Protect Password:="4658123907"

Y en la de desproteger tienes

. Unprotect "PASS"

Deben ser iguales, sustituye PASS por 4658123907

Estoy desde el celular, no se que le pasa a Todoexpertos, no pone la respuesta.

En la macro de proteger tienes

.Protect Password:= "4658123907"

Y en desproteger tienes

. Unprotect "PASS"

Tienes que sustituir la palabra PASS por 4658123907

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas