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.....
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
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….
Al final pon:
workbooks("Libro 1").activate
Un saludo
Me explico mejor, una macro que desactive otra macro según criterio en una celda ejemplo PARAR
Salud2....
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.
A ver si entiendo correctamente lo que necesitas.
¿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
Perdona mi ignorancia, pero creo que si se puede lo que pretendo me explico.
1º
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.
2º
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
3º
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…
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
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...
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
ok
Gracias.
Salud2...
yo tambien tenia un problema que no sabia porque no salia, vi algunos videos y ponian sin las comillas simples. pero a mi no me funcionaba, hasta que
llegue ha este blog, y mencionaron las comillas simples... y funciono... muchas gracias
Application.Run "'CASA 6,75 EUR.xlsm'!Copiar_Pegar_Casa"
Gracias por la ayuda...