Macro que se active de acuerdo a un condicional

Tengo 10 hojas, pero solo debo permitir el acceso a cada hoja ha determinado usuario.

Para ello oculte las filas que contienen la información en cada hoja, y a cada hoja le di una clave de protección.

Como no debo ocultar las hojas, requiero una rutina que si en la celda C1 al digitar resulta el numero 123 se active automáticamente una macro ya grabada para todo el libro.

Sub Macro1()

'
' Macro1 Macro
'
Cells.Select
Selection.EntireRow.Hidden = False
End Sub

Con ello pretendo que al digitar la clave para desbloquear las celdas, automáticamente se muestren las filas ocultas.

O si hay otra manera más practica.

1 respuesta

Respuesta
1

Copia esta macro en la/las hojas que quieras controlar la celda C1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
    If Range("C1") = 123 Then
       Macro1
    End If
End If
End Sub

Por favor, si te ha valido la respuesta, puntúala y cierra la pregunta.

¡Gracias! 

Hola, hice la sentencia. Me funciona. Pero como pide una macro para el siguiente paso que deseo hacer, encuentro como inconveniente que queda vulnerable el requisito de digitar la clave. Ya que pueden entrar a vista y en ver macros ejecutarla sin necesidad de la clave.

Cómo puedo hacer para ocultar la opción de ver macros para el archivo, o que me ejecute la sentencia de la macro desde los eventos de la hoja.

Esta es la sentencia que use:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("b3") = "Ant3305" Then
ActiveSheet.Unprotect "Ant3305"
Call Macro1
Else
MsgBox "Por favor verifique su clave y digitela nuevamente", , "CLAVE ERRADA"
End If
End Sub

Esta es la sentencia de la Macro1:

Sub Macro1()

ActiveSheet.Unprotect "Ant3305"

Cells.Select
Selection.EntireRow.Hidden = False
Range("A2:C3").Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Range("B8").Select
End Sub

Si lo que quieres es proteger las macros para que no se vean,

1.-Vete al editor-de VBA->Herramientas->Propiedades del VBA Project.

2.- Bloquea el proyecto para su visualización y escribe una contraseña.

Si te ha valido la respuesta.

Gracias, ya lo había bloqueado pero cuando abro el archivo, puedo ir en el menú a la opción Vista y seleccionar Ver Macros, me muestra la macro y si le doy Ejecutar no tengo necesidad de digitar la clave.

Lo que necesito es que para poder visualizar la información deben digitar la clave.

Quedo atento a tu orientación.

Haz que la subrutina (macro), sea Privada, de esta forma:

Private Sub Macro1()

De esta forma ya no te aparece en el comando Macros.

¡Gracias! 

El que no sabe es como el que no ve.

Era super sencillo. Ya aprendí. Nuevamente gracias.

Maestro, sigo varado.

Una vez coloque que fuese privada la macro, al digitar la clave me sale el error de la primer imagen. Lo que me obligaba a desbloquear el proyecto de vba.

Luego al digitar nuevamente la clave me arroja un error, donde no reconoce la macro, creeria que es porque como esta oculta (privada) no la detecta.

Tu orientación para corregirlo.

Coloca Macro1() debajo del evento Change, el que muestras en la imagen de arriba y no tendrás problemas.

Buenas noches Maestro,

No logré resolverlo. Me genera el mismo error.

Estas son las sentencias:

Por las imágenes que has puesto, veo que Macro1 no está en Worksheet, cómo está el evento Change.

Pon la Macro1 debajo del End Sub, del evento Change.

¡Gracias! 

Al fin lo culmino. Excelente tu apoyo y lo más importante para mi, super oportuno.

Espero seguir contando con tus orientaciones.

Buen día.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas