detener macros automaticas

9 envíos / 0 nuevos
Último envío
JONATHAN PACHECO
Imagen de JONATHAN PACHECO
Offline
última acción: Hace 6 años 2 meses
alta: 22/12/2017 - 21:49
Puntos: 65
detener macros automaticas

Hola buenas un saludo previo a todos y deseandoles que pasen una hermoza navidad y prospero año nuevo, necesito una ayuda con respecto a mi proyecto en el que estoy trabajando ya tengo todo casi listo solo me falta un ultimo dtalle el cual no soy capaz de resolverlo.

tengo un libro de excel 2007 en el cual en la hoja1 he colocado en tres celdas "B6","B20" y "B34" mensajes para que excel los lea en voz alta y he programado un emulador de un timer con Application.Ontime para que excel los lea cada 5 minutos, es decir primero se ubica en la celda "B6" y lee el mensaje en voz alta luego espera cinco minutos y se ubica en "B20" y hace lo mismo lo lee y espera 5 minutos mas por ultimo en "B34" y asi infinitamente hasta que le ordene detenerse y he aqui mi problema ya que cuando solo era un solo mensaje podia detener la ejecución automatica facilmente pero cuando lo incremente a tres mensajes me genera un error y no puedo detenerlo sin generar errores aqui les muestro todo el codigo que utilizo para un mejor entendimiento.

Dim Tiempo As Variant

Dim Ejecutando As Boolean

 

Sub Macro1()

UserForm1.Show

End Sub

 

Sub Macro2()

Call iniciarReloj

End Sub

 

Sub Macro3()

Call detenerReloj

End

End Sub

 

Sub programarMacro()

Tiempo = Now + TimeValue("00:05:00")

Application.OnTime Tiempo, "miMacro", , True

End Sub

 

Sub miMacro()

Sheets(1).Select

Range("B6").Select

TEXTO1 = ActiveCell.Text

 

If ActiveCell <> Empty Then

    Application.Speech.Speak TEXTO1

End If

 

Call programarMacro2

End Sub

 

Sub programarMacro2()

Tiempo = Now + TimeValue("00:05:00")

Application.OnTime Tiempo, "miMacro2", , True

End Sub

 

Sub miMacro2()

Sheets(1).Select

Range("B20").Select

TEXTO1 = ActiveCell.Text

 

If ActiveCell <> Empty Then

    Application.Speech.Speak TEXTO1

End If

 

Call programarMacro3

End Sub

 

Sub programarMacro3()

Tiempo = Now + TimeValue("00:05:00")

Application.OnTime Tiempo, "miMacro3", , True

End Sub

 

Sub miMacro3()

Sheets(1).Select

Range("B36").Select

TEXTO1 = ActiveCell.Text

 

If ActiveCell <> Empty Then

    Application.Speech.Speak TEXTO1

End If

 

Call programarMacro

End Sub

 

Sub iniciarReloj()

Ejecutando = True

Call programarMacro

End Sub

 

Sub detenerReloj()

If Ejecutando = True Then

Ejecutando = False

Application.OnTime Tiempo, "miMacro", , False

End If

End Sub

aca en la macro detenerReloj() surge mi problema porque como ya habia dicho cuando se trata de un solo mensaje es facil detener la ejecucion consecutiva tal cual esta el codigo de la macro detenerReloj() pero como ahora son tres mensajes me genera un error

en la ejecucion espero me puedan ayudar para poder terminar la ejecucion consecutiva de estas macros, tambien cabe mencionar que a mi archivo de excel le inserte un userform en el cual tengo dos botones uno con iniciar y otro con detener y a cada uno le inserte un codigo para llamar a las macros iniciar reloj y detener reloj, muchas gracias y felices fiestas.

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 7 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Prueba una solución más

Prueba una solución más sencilla:

Un botón vinculado a la subrutina dentenerReloj()

Y pon lo siguiente:

Sub detenerReloj()

End

End Sub

 

La orden End así, tal cual, funciona como cuando presionas el botón de parar la macro. Utilízalo con cuidado, pues no finaliza variables ni objetos ni nada. Solo termina la ejecución donde esté.

Un saludo

AdjuntoTamaño
Image icon botonparar.jpg30.56 KB
JONATHAN PACHECO
Imagen de JONATHAN PACHECO
Offline
última acción: Hace 6 años 2 meses
alta: 22/12/2017 - 21:49
Puntos: 65
eso no funciona ese codigo

eso no funciona ese codigo (END) solo cierra el formulario, pero aun con el formulario cerrado las macros siguen ejecutandose y el servicio de lectura en voz alta sigue ejecutandose...

Cron
Imagen de Cron
Offline
última acción: Hace 7 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
En teoría la orden END sin

En teoría la orden END sin nada más debería detener toda ejecución de código. ¿Podrías subir el archivo (o parte de él) para que podamos evaluarlo?

 

Un saludo

JONATHAN PACHECO
Imagen de JONATHAN PACHECO
Offline
última acción: Hace 6 años 2 meses
alta: 22/12/2017 - 21:49
Puntos: 65
aca les proporciono una copia

aca les proporciono una copia del archivo el cual esta elaborado en Excel 2007 y contiene firma digital local la cual tendran que descartarla para ejecutar las macros gracias

AdjuntoTamaño
File leer_en_voz_alta.xlsm28.7 KB
Cron
Imagen de Cron
Offline
última acción: Hace 7 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Ok es cierto que una vez se

Ok es cierto que una vez se ha lanzado el evento ontime, solo se puede parar lanzando de nuevo el evento ontime con el parámetro schedule en false. Justo como tú haces en el botón "detener lectura"

Lo que ocurre es que tú mandas detener los 4 eventos ontime. El problema es que en cada momento solo hay un evento ontime lanzado (no lanzas los 4, uno a 10 segundos, otro a 20... sino que lanzas el primero, y cuando termina lanzas el siguiente)

Por lo tanto, cuando intentas cambiar el schedule a false de eventos ontime que no existen, Excel se queja.

Como es un error controlado y el código es muy sencillo, de solo unas líneas, yo pondría un ON ERROR RESUME NEXT en tu evento detenerReloj()

De esta manera, si lo detienes entre el texto 2º y el texto 3º, el primero dará error, continuará a la siguiente línea, el segundo dará error también, continuará, detendrá el tercero, y el cuarto volverá a dar error y seguirá hacia el end If. Todos los errores serán transparentes para el usuario.

 

Por cierto, yo llamaría a este procedimiento también en el evento deactivate del formulario. Así, al cerrarlo, también se detendrá la lectura.

Un saludo

JONATHAN PACHECO
Imagen de JONATHAN PACHECO
Offline
última acción: Hace 6 años 2 meses
alta: 22/12/2017 - 21:49
Puntos: 65
ok Cron probare tu sugerencia

ok Cron probare tu sugerencia y te comento gracias

JONATHAN PACHECO
Imagen de JONATHAN PACHECO
Offline
última acción: Hace 6 años 2 meses
alta: 22/12/2017 - 21:49
Puntos: 65
Cron quedo perfecto funciono

Cron quedo perfecto funciono la linea de codigo que me sugeriste muchas gracias, como hago para calificar tu ayuda?? o darte estrellas o puntaje en este foro??

Cron
Imagen de Cron
Offline
última acción: Hace 7 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
No hace falta. Con haber

No hace falta. Con haber comentado que funcionó es suficiente. Gracias.