ejecución automática de macro

Koopa_Troopa

New Member
Joined
Jan 24, 2008
Messages
2
Hola.

Esta es mi primera pregunta en el foro. El caso es que llevo varios días intentando ejecutar una macro de VB cada vez que se cumpla una condición en una celda de Excel. Me explico. Tengo una celda en la que recibo cotizaciones de activos (por ejemplo, Telefónica) y otra en la que compruebo si el valor de la acción supera un cierto valor. Solo quiero que se ejecute la macro la primera vez que se supere el valor, para lo que tengo otra celda que la macro pone a 1 una vez termina de ejecutarse, de modo que la condicion seria: =si(y(cotizacion > umbral;celda_primera_vez = 0);macro();0). Esto sería lo que me gustaría hacer. Como creo que no se pueden ejecutar macros así, sólo funciones, lo que hago es llamar a una función, pero entonces no puedo modificar el valor de la celda_primera_vez, no me deja. Así que lo que intenté hacer es devolver un 1 en la función e intentar que me salte el evento Worksheet_Change, pero no funciona para valores que cambian en fórmula, sólo si el usuario introduce un cambio y pulsa Intro.

Me puede ayudar alguien, por favor?????

Muchas gracias

<!-- google_ad_section_end -->
 

Excel Facts

Can a formula spear through sheets?
Use =SUM(January:December!E7) to sum E7 on all of the sheets from January through December
¡Bienvenido a MrExcel!

Haga un prueba para ver si el evento Calculate le serviría. Ponga una rutinita allí -- puede ser algo tan sencillo como:
Code:
Private Sub Worksheet_Calculate()
    MsgBox "¡Ay, que guapo yo!", vbExclamation, "¡Hola!"
End Sub
y observe cuándo es que se activa. Si se activa en un momento apropiado, ya sabemos donde poner el código, solo falta escribir una rutina adecuada.
 
Upvote 0
Muchas gracias por su pronta respuesta!!

Ya he probado el evento Calculate, y es una solución, aunque no del todo buena. El caso es que Excel llama a ese método cada vez que se actualiza cualquier fórmula de la hoja y en mi hoja tengo muchas cotizaciones de activos puestas en filas y, por tanto, muchas fórmulas. Así que tengo que comprobar en cada llamada al evento si se cumplen las condiciones para lanzar la mi macro en cada activo. Al final la hoja funciona pero me satura Excel, pues está continuamente recibiendo cotizaciones en tiempo real y recalculando fórmulas.

Por otro lado, he estado probando la instrucción ActiveWorkbook.SetLinkOnData, para que me lance mi macro cada vez que se reciba una cotización desde una fuente externa (Bloomberg en mi caso). Pero tengo el mismo problema, yo quiero que la macro se ejecute cuando se cumpla una condición, no tener que comprobar si se cumple la condición cada vez que la cotización cambie. SetLinkOnData se puede activar y desactivar cuando queramos, y lo que he intentado es poner una celda en mi hoja con:

=si(y(cotizacion > umbral;celda_primera_vez = 0);activar_conexion();apagar_conexion())

De este modo, la siguiente cotización que reciba ya me debería saltar la macro. El problema es que SetLinkOnData no se puede activar desde funciones, sólo desde macros manuales. En fin, que estoy un poco desesperado ya :confused:
 
Upvote 0

Forum statistics

Threads
1,223,970
Messages
6,175,703
Members
452,667
Latest member
vanessavalentino83

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