Ejecutar macro de otro libro ?????

12 envíos / 0 nuevos
Último envío
eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
Ejecutar macro de otro libro ?????

Hola Buenas.

Tengo un problema con una macro que no ejecuta otra macro de otro libro.

Esta macro en libro2 abre el libro 1 hasta aquí todo ok.

Sub ABRIRLIBROSOLO()

Application.ScreenUpdating = False

Workbooks.Open Filename:="C:\Users\root\Desktop\PRUEBA ABRIR CERRAR LIBROS\XXXXXX\LIBRO1.xlsm"

Sheets("HOJA1").Select

Range("F1").Select

End Sub

Cuando se abre el libro 1 tengo una llamada a una macro en thisworkbook pero no se ejecuta.

Private Sub Workbook_Open()

On Error Resume Next

Call Copiar_Pegar

End Sub

La macro funciona tanto desde el botón de su hoja y abriendo el libro1 llama a la macro, pero cuando entra desde el libro2 no va.

Salud2.....

 

Andrés Montaña
Imagen de Andrés Montaña
Offline
última acción: Hace 1 mes 6 días
alta: 25/07/2018 - 00:10
Puntos: 75
Quizás Deberías Probar con este Codigo

que tal si usas en Vez de " Call Copiar_Pegar " usas el siguiiente codigo

Application.Run “Libro1.xlsm!Copiar_Pegar

 

Andres Montaña

anfemonga@gmail.com

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
respuesta

ok.

Gracias.

Ahora siguiente paso y creo que el último, una vez que arranque las macros desde el libro 1 ya que a este lo prepare para que sea un bucle desde el libro 1 al 13 ( que son los reales) como puedo hacer para que acabe en el libro 1 ejemplo  a las 30,31 o 35 vueltas o pasadas ¿?

Salud2….

Cron
Imagen de Cron
Offline
última acción: Hace 7 horas 10 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10860
Al final pon:workbooks("Libro

Al final pon:

workbooks("Libro 1").activate

 

Un saludo

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
respuesta

Me explico mejor, una macro que desactive otra macro según criterio en una celda ejemplo PARAR

Salud2....

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
respuesta

Bueno sigo trasteando y buscando, encontre esto:

Sub worksheet_change(ByVal target As Range)

Set target = Range("B37")
If target.Value = "PARAR" Then
 Call ABRIRLIBROSOLO_NUEVA
End If

End Sub

Pero lo unico que es hago es un engaño es mandar a una macro con una ruta que no existe, vale se para el bucle con el mensaje de finalizar y depurar.

Que orden se puede poner para el lugar de la llamada a macro Call sea detener la macro X ??

Salud2.

Cron
Imagen de Cron
Offline
última acción: Hace 7 horas 10 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10860
A ver si entiendo

A ver si entiendo correctamente lo que necesitas.

  1. Mientras está corriendo una macro, no se evalúan nuevas macros. Es decir, no pueden correr dos macros en paralelo. (La realidad es que sí, pero mediante técnicas complejas, pero en general la respuesta es que no se puede).
  2. Mientras está corriendo una macro, no se pueden cambiar manualmente valores de celdas, a menos que pares manualmente la macro en modo debug. Entiendo que esto no es lo que quieres hacer.
  3. Lo que sí puedes hacer es, en cada ciclo de tu macro, evaluar las condiciones y salir por completo de la macro si las condiciones son las adecuadas.

¿Cómo se hace esto último? Hay dos maneras: la sencilla y "peligrosa" y la adecuada y "laboriosa".

La sencilla es utilizar la función 

end

Si pones esto en cualquier punto de cualquier rutina o función, la ejecución de todo lo que haya en ese momento se detendrá. ¿Por qué es "peligroso"? Sencillamente porque no limpias memoria antes de cerrar, no devuelves las cosas a su sitio (por ejemplo, volver a activar la pestaña en la que quieres que tu usuario esté en ese momento, volver a activar el cálculo automático si lo habías desactivado...)

La otra opción es utilizar exit y pasar por la sección que tengas preparada para hacer todos los set objeto=nothing, y todos los application.calculation = xlCalculationAutomatic y similares. Es posible que tengas que utilizar exit varias veces, si tienes bucles anidados o rutinas anidadas.

Un saludo

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
respuesta

Perdona mi ignorancia, pero creo que si se puede lo que pretendo me explico.

La macro que pongo en plan engaño de abrir un libro que no existe, para el ciclo de abrir el siguiente libro, ya pare Excel que es lo que quiero con un dato concreto en una celda.

La macro que pretendo parar real es:

ABRIRYGUARDAR  esta macro concentra la llamada de 3 macros  con sus tiempos de ejecución.

Call MACROTIEMPO1

Call MACROTIEMPO2

Call MACROTIEMPO3

Por lo tanto de la macro que pongo última en el post en lugar de llamar Call  fuese de parar o no ejecución de ABRIRYGUARDAR  

U otra macro  similar.

Otra manera de parar que acabo de hacer (claro una chapuza) pero bueno paro Excel es:

Sub worksheet_change(ByVal target As Range)

 

Set target = Range("B37")

If target.Value = "PARAR" Then

Stop

ABRIRYGUARDAR

End If

 

End Sub


Claro se abre la ventana de Visual Basic correspondiente me da error en Stop le de loy aceptar, excel parado.


Salud2…

Cron
Imagen de Cron
Offline
última acción: Hace 7 horas 10 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10860
Lo que pasa es que poner STOP

Lo que pasa es que poner STOP en el código es lo mismo que poner un punto de parada (cuando pones el punto rojo para que pare la ejecución), y sirve para el debugging. No debes hacer eso para un usuario, porque se le aparecerá el código delante de la pantalla y le volverás loco.

Si el código es para ti, y así te funciona, estupendo.

Ahora bien, si lo que pides es "una macro que desactive otra macro", eso en Visual Basic para Aplicaciones no existe, porque no se puede ejecutar una macro mientras está corriendo otra. Por lo tanto, nunca se podrá parar la ejecución de otra macro, porque no puede haber otra corriendo a la vez.

Si lo que quieres es que, si se dan ciertas condiciones (ya estén en la hoja previamente, ya sean resultado de los cálculos de las órdenes previas del código), la macro se pare, entonces utiliza las indicaciones que te di en la última respuesta, es decir, end o exit.

Todo esto, claro, a menos que haya más cosas que no nos hayas contado. Quizás sería interesante que subieras un ejemplo  (con datos falsos, claro)

 

Tus soluciones hasta ahora son dos:

-generar una excepción no controlada. Eso es lo que haces cuando llamas a una macro que no existe. Pero ¿para qué generar una excepción si puedes salir controladamente?

-Generar un punto de parada para debug. Si tienes que actuar manualmente, ¿para qué quieres el código?

 

Un saludo

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
respuesta

Claro todo esto esto es un tema particular.

Pense que se podia detener una macro con otra, ya que la que pretendo parar tiene tiempos pense que por eso daria tiempo a pararla o que no se ejecute, puesto que la que hay que parar no esta en ejecucion.

Otra cosa que me tiene loco, con esta orden haciendo prubeas en una carpeta, todo ok

Application.Run "LIBRO1.xlsm!Copiar_Pegar_Casa"

Pero cuando paso al libro y carpeta definitivo, escribo el nombre real del liro

Application.Run "CASA 6,75 EUR.xlsm!Copiar_Pegar_Casa"

Y no va me da error 1004 tengo que escribrir LIBRO1 y todo ok????

Salud2...

 

Cron
Imagen de Cron
Offline
última acción: Hace 7 horas 10 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 10860
Lo que ocurre es que tú

Lo que ocurre es que tú tienes una estructura así:

Ejecución de macro:

-Lanza macro 1

-Lanza macro 2

-Lanza macro 3

Finaliza ejecución de macro

 

Cuando haces esto, no tienes tres ejecuciones de código diferentes. Tienes una, y dentro de esa ejecución, vas lanzando rutinas. Hasta que no terminas la ejecución de todo, no puedes generar nuevos eventos que lancen nuevas macros.

 

En cuanto al nombre de tu archivo, al tener espacios debes ponerlo entre comillas simples. Prueba esto:

Application.Run "'CASA 6,75 EUR.xlsm'!Copiar_Pegar_Casa"

 

Un saludo

eugeniocol
Imagen de eugeniocol
Offline
última acción: Hace 2 semanas 6 días
Nivel 1 - 200 puntos
alta: 29/08/2017 - 17:21
Puntos: 880
resuelto

ok

Gracias.

Salud2...