Macro para DESBLOQUEAR un rango en una hoja protegida

Tengo una serie de hojas protegida por la contraseña "ABC"

A través de una macro necesito DESPROTEGER el rango de celdas A10:B20 de la Hoja1 y B20:C30 de la Hoja2

¿Tendrán una macro para esta opción?

2 Respuestas

Respuesta
2

H   ol a:

Ejecuta la "Macro1" para desproteger las celdas:

Sub Macro1()
'Por.Dante Amor
    '1 para desproteger
    Call Prot_Des(1, "Hoja1", "ABC", "A10:B20")
    Call Prot_Des(1, "Hoja2", "ABC", "B20:C30")
End Sub

También agrega el siguiente código al módulo:

Sub Prot_Des(op, hoja, pass, rango)
'Por.Dante Amor
    If op = 1 Then
        Sheets(hoja).Unprotect pass
        Sheets(hoja).Range(rango).Locked = False
        Sheets(hoja).Protect pass
    Else
        Sheets(hoja).Unprotect pass
        Sheets(hoja).Range(rango).Locked = True
        Sheets(hoja).Protect pass
    End If
End Sub

Ahora si quieres, volver a proteger las celdas, ejecuta la "Macro2"

Sub Macro2()
'Por.Dante Amor
    '2 para desproteger
    Call Prot_Des(2, "Hoja1", "ABC", "A10:B20")
    Call Prot_Des(2, "Hoja2", "ABC", "B20:C30")
End Sub

Avísame cualquier duda.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! 

Pregunta: ¿Cómo se llama hacer esto?

op = 1

¿Operadores? De eso si nunca sé usarlas

Call Prot_Des (1, "Hoja1", "ABC", "A10:B20")

Cómo funciona call? Entiendo la función Unlock pero dónde aprendes esas funciones tipo Prot_des?

H   o la:

Te contesto cada una de tus dudas:

Call, se utiliza esta instrucción para hacer una llamada a otra macro.

Op, es una variable, le puse "op" porque estoy abreviando el nombre "opción", significa que estoy enviando la opción 1 o la opción 2. Es solamente el nombre de una variable, le pude poner "opcion" u "opc", en este caso, solamente le puse "op".

Luego la macro o procedimiento "Prot_des", recibe un valor en la variable op, con la instrucción If, pregunta si es 1, entonces que haga locked = false, si no es 1, entonces que haga locked = true, que resumiendo quedaría mejor así:

Sub Prot_Des(op, hoja, pass, rango)
'Por.Dante Amor
    Sheets(hoja).Unprotect pass
    If op = 1 Then
        Sheets(hoja).Range(rango).Locked = False
    Else
        Sheets(hoja).Range(rango).Locked = True
    End If
    Sheets(hoja).Protect pass
End Sub

Con la práctica vas aprendiendo a crear Rutinas o Procedimientos, es decir, si un conjunto de instrucciones es utilizada varias veces en un programa, entonces generas un Procedimiento; y cada vez que lo necesitas lo llamas. Ejemplo:

Call Prot_Des(1, "Hoja1", "ABC", "A10:B20")

Call Prot_Des(2, "Hoja1", "ABC", "A10:B20")

De esa forma no es necesario escribir el mismo código varias veces.

Sal u dos.

Respuesta
1

.

Buenas, Alex

Puedes usar la siguiente rutina.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub Despro()
'---- Variables modificables ----
'=== ALEX, modifica estos datos de acuerdo a tu proyecto:
    Pag1 = "Hoja1" 'nombre de la hoja del primer rango a desproteger
    Rango1 = "A10:B20" ' primer rango a desproteger
    Pag2 = "Hoja2" '    nombre de la hoja del primer rango a desproteger
    Rango2 = "B20:C30" ' primer rango a desproteger
    Clave = "ABC"
'---- fin Variables
'
'---- inicio de rutina:
'  
With Sheets(Pag1)
    .Unprotect Clave
    .Range(Rango1).Locked = False
    .Protect Clave
End With
With Sheets(Pag2)
    .Unprotect Clave
    .Range(Rango2).Locked = False
    .Protect Clave
End With
End Sub

Nota que, al principio del código, hay unas variables para que lo adaptes a tu archivo, a otras hojas u otros rangos.

.

¡Gracias! 

Recién estoy entiendo un poco sobre VBA, de verdad que no se mucho pero aprender uso de variables esta muy muy muy por encima de mi nivel.

Pero es interesante.

En el caso de Pag2 y Rango2 supongo que quisiste decir: 

    Pag2 = "Hoja2" '    nombre de la hoja del SEGUNDO rango a desproteger
    Rango2 = "B20:C30" ' SEGUNDO rango a desproteger

Aún no lo aplico pero lo entiendo, creo que es más fácil lees Macros antes que escribirlos.

Gracias nuevamente!

.

Tienes razón, olvidé reemplazar esa palabra ahí. Pero es sólo una explicación, la rutina funciona correctamente.

El uso de las variables te permite guardar en ellas palabras o números que luego serán usados en el código para hacer lo que se le indica.

La ventaja está en que puedes cambiar el contenido de ellas y la rutina funcionará para las nuevas indicaciones. Por ejemplo si quisieras que desbloquee otro rango, o uno más amplio o en una hoja que le cambiaste el nombre.

Este modo de resolver es más simple para el usuario y, de hecho, más eficiente para administrar.

Finalmente, es cierto que uno aprende leyendo códigos. En ese sentido, puede iniciarse usando la Grabadora de macros, hacer algún procedimiento conocido y ver cómo lo escribió MS Excel.

Luego, sí, hay que estudiar estructuras, declaración de variables, etc.

Espero haberte sido de ayuda.

Un abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas