Bloquear CODIGO de hoja con Macro

thecat_re

New Member
Joined
Jun 29, 2011
Messages
12
Buenas..

He colocado estos codigos tras hojas de calculos:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("d2") < 30 And Range("e2") < "0.60%" Then
UserForm1.Show
End If
End Sub

Este para que en una celda si hay menos de 30 dias y un avance menos de 60% me active un userform. Pero hasta tanto estos valores no sean modificados y que estén fuera de esos rangos el userform no deja de salir y se vuelve molesto sin dejar trabajar..

Que posibilidad existe mediante un macro y/o alguna solución que me den, que pueda activar y desactivar este codigo cuando lo desee.

Este es otro codigo que coloque en otra hoja:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C11").Value > 100 Then
Alerta.Show
End If
End Sub


Que posibles soluciones me dan para activar y desactivar estos codigos...


Saludos, estaré muy agradecido
 

Excel Facts

Copy formula down without changing references
If you have =SUM(F2:F49) in F50; type Alt+' in F51 to copy =SUM(F2:F49) to F51, leaving the formula in edit mode. Change SUM to COUNT.
Hola thecat_re,

No sé exactamente que hará el userform al mostrarse, pero tal vez para que no te moleste por cada movimiento
que das si los valores cumplen las condiciones para que el userform se active, sería mejor cambiar de evento.

Quiero decir, en lugar de usar un monitoreo para cuando el evento es "seleccionar cualquier celda", cambiá a
monitoreo sólo para cuando el evento es "cambiar de valor celdas especificadas", entonces en lugar de ejecutarse
el código que lanza el userform cada vez que seleccionés una nueva celda, se ejecutará sólo cuando cambiés los
valores de las celdas especificadas.

O sea, en lugar de "Worksheet_SelectionChange" cambiá a "Worksheet_Change"

Entonces en ambos casos en lugar de:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
usarías:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Espero esté cerca de lo que andás buscando.

Saludos cordiales.
 
Last edited:
Upvote 0
Hola Nuevamente cgcamal

Excelente tu respuesta, era exacto lo que queria, los userform simplemnete les coloque mensajes de alerta o Felicitaciones.

Pero cambiando lo que me dijiste ya solo aparecen una vez y dejan trabajar en la hoja, Gracias por tu ayuda, demos este tema como solucionado entonces..
 
Upvote 0
Buenas


Amigo Todo parecia bien hasta que escribi valores en cual otra celda, sea texto o lo que sea, la ventana se dispara, al seleccionar una celda no se dispara el userform pero al escribir en cualquier celda lo hace.. existe la posiilidad que solo al cambiar los valores de los rangos se dispare el userform.?

Otra cosa es que no puedo tener los 2 codigos, asi los tengo en una hoja

HTML:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C11").Value > 100 Then
Alerta.Show
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("H15") < 4 And Range("T15") < "0.60%" Then
Alerta2.Show
End If
End Sub

Pero al escribir en los rangos o probar los codigos o escribir en cualquier celda me salta
HTML:
Error de compilación:

Se ha detectado un nombre ambiguo: Worksheet_Change

Que puedo hacer saludos..
 
Upvote 0
Hola de nuevo,

Faltaba definir el rango a monitorear, favor probar con este nuevo código.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Celda As String, MiRango as Range

Set MiRango = Union(Range("C11"), Range("H15"), Range("T15"))[COLOR=DarkGreen] 'Ya que no son celdas contiguas se usa comando "Union"[/COLOR]

If Not Intersect(Target, MiRango) Is Nothing Then [COLOR=DarkGreen]' Estableciendo el rango a monitorear[/COLOR]

Celda = Target.Address [COLOR=DarkGreen]'Esta es la variable Target propia del evento Worksheet_Change, la cual podemos manipular[/COLOR]

    Select Case Celda
        Case "$C$11"
            If Range("C11") > 100 Then
                Alerta.Show
            End If
        Case "$H$15", "$T$15"
            If Range("H15") < 4 And Range("T15") < 0.6 Then
                Alerta2.Show
            End If
    End Select
End If
End Sub
Espero mejore esta vez,

Saludos cordiales
 
Last edited:
Upvote 0
Hola Greg Truby

Los userform de alertas, indican como su nombre lo indica alertas (Con etiquetas o Label), ya que estoy creando una especie de sistema para una gerencia de construccion y una de las alertas es que al tener menos de 4 dias para finalizar la obra ( que en el caso real sera 30 dias) y con un avance fisico menor a 60% dispare este userform indicando al usuario que tome precauciones..

y el otro userform hace algo parecido, simplemente alertas coloque en ellos.

Pero se hacia muy molesto que al usuario simplemente con seleccionar una celda, o colocando cualquier valor en otras celdas se dispararan los userform cuando estos cumplian el rango de criterio para aparecer..

Pero con el ultimo codigo que envio
cgcamal todo ha salido perfecto, ahora si esta todo bien..

En verdad excelente foro las respuestas son efectivas y con soluciones mas sencillas..

Gracias en verdad..
 
Last edited:
Upvote 0
Si el mensaje que despliega el userform es variable, entonces bien, puede ser que VBA es la forma mejor.

Pero si el mensaje es constante y no varia, una solución más sencillas sería usar validación de datos.

En el caso de VBA siendo la solución más apropriada, solo agrego que en el futuro considera usar rangos nombrados en vez de "hard-coding" las direcciones de celdas particulares. Usar rangos nombrados hace que su código no falla la primera vez que alguien inserta o suprime una línea o columna.
 
Upvote 0

Forum statistics

Threads
1,224,587
Messages
6,179,738
Members
452,940
Latest member
Lawrenceiow

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top