EXCEL Ejecutar una macro si una celda es "VERDADERA"

Quería saber qué sentencia tengo que escribir en VISUAL BASIC de Excel, para que cuando yo pulse un botón que tengo asociado a una macro, ésta se ejecute sólo y "sólo si" una determinada celda es verdadera, por ejemplo, pongamos que en la celda ZZ4 yo pongo una fecha y en la celda ZZ5 hago una comparativa, que dice: si ZZ5 es menor que Hoy(), ponga VERDADERO.

Lo que quiero es que si ZZ5 es falso (porque ya se ha superado la fecha de ZZ4) no se ejecute la macro, al pulsar el botón que tengo asociada a la macro, pero si es VERDADERA que si se ejecute.

Respuesta
1

Ejemplo:

If [ZZ5] = False then exit sub

----

Recomendable:

1 respuesta más de otro experto

Respuesta
2

Coloca al inicio de tu macro, la del botón, la instrucción que realiza la comparación. Si no es 'True' (verdadero) el proceso se cancelará:

Te dejo un ejemplo. Reemplaza 'ActiveSheet' por el nombre de la hoja donde se encuentre la celda ZZ5.

Sub enviar_correo()
If ActiveSheet.Range("ZZ5") <> True Then Exit Sub
    Dim Email As CDO.Message
    Set Email = New CDO.Message
'... resto del código
End If
End Sub

Hola Elsa,

GENIAL!!

Me alegro muchísimo de saber de Usted ELSA, una gran profesional.

Me faltaría saber, aunque es ya otra pregunta, pero estoy atrancado ahí: ¿cómo puedo filtrar por constantes, es decir, por valores, que no salgan las celdas vacías, ni #"REF", ni tampoco #N/D.

En realidad son "números" los que quiero que se filtren en la columna.

Me refiero en Visual Basic, claro!!

Lo que a mi me sale al grabar la macro es esto de más abajo, pero supongo que si cambio los datos, ya no me lo filtrará bien:

ActiveSheet.Range("$ZY$1:$ZZ$2000").AutoFilter Field:=2, Criteria1:=Array( _
"10,23", "10,76", "12,74", "127,99", "14,83", "18,5", "20,26", "21,99", "27,47", "27,98" _
, "299", "37,8", "38,99", "389", "4,97", "43,1", "45,88", "47,97", "5,56", "527,04", "7,7" _
, "7,84", "84,9", "94,08"), Operator:=xlFilterValues

Y si son muchos más también te dará error ;)

Siendo números positivos podrías utilizar esta instrucción:

    ActiveSheet.Range("$ZY$1:$ZZ$2000").AutoFilter Field:=2, Criteria1:=">=0", _
        Operator:=xlAnd

De todos modos no quiero dejar de sugerirte que agregues un control de error en las fórmulas para evitar errores del tipo #"REF" o #N/D. Porque estos errores no solo afectan al filtro sino que también te devolver errores en otros cálculos con este rango.

=SI.ERROR(tu fórmula); "")

Por ej, si tu fórmula fuese un BUSCARV, sería algo así, donde en caso de error devolvería vacío.

=SI.ERROR(BUSCARV(ZP12;ZQ:ZR;2;FALSO);"")

Y luego podrás filtrar por 'no vacíos'.

    ActiveSheet.Range("$ZY$1:$ZZ$6921").AutoFilter Field:=2, Criteria1:="<>"

PD) una aclaración al margen:   <> True   es exactamente igual a  = False   ;) ;)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas