VBA

18/03/2010 - 15:08 por Fernando | Informe spam
Muy buenas:
Tengo el siguiente procedimiento:
Sub CopiarDatosTM1()
On Error Resume Next
FilePath = ThisWorkbook.Path & "\"
ITV = Range("CentroTM1").Value
FileDtno = FilePath & "iberica_DR.xls"
Workbooks.Open FileDtno
LibroDtno = ActiveWorkbook.Name
Macro = LibroDtno & "!" & "CopyData"
Application.Run Macro
End Sub
Como podéis ver este procedimiento llama a un procedimiento de otro libro.
El problema es que cuando termina de ejecutar el procedimiento del otro
libro, no vuelve al procedimiento original y me gustaría saber como puedo
hacer para que una vez ejecutado el procedimiento del otro libro regrese de
nuevo al procedimiento original.
Muchas gracias por adelantado y saludos,

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
18/03/2010 - 18:49 | Informe spam
hola, Fernando !

cuando una macro "llama" a otro procedimiento, se ejecuta el procedimiento llamado
al terminar la ejecucion de este "branch", la macro (regresa y) continua en la siguiente linea
en el caso del codigo que expones, "la siguiente" linea es: => End Sub

saludos,
hector.

__ OP __
Tengo el siguiente procedimiento:
Sub CopiarDatosTM1()
On Error Resume Next
FilePath = ThisWorkbook.Path & "\"
ITV = Range("CentroTM1").Value
FileDtno = FilePath & "iberica_DR.xls"
Workbooks.Open FileDtno
LibroDtno = ActiveWorkbook.Name
Macro = LibroDtno & "!" & "CopyData"
Application.Run Macro
End Sub
Como podeis ver este procedimiento llama a un procedimiento de otro libro.
El problema es que cuando termina de ejecutar el procedimiento del otro libro
no vuelve al procedimiento original y me gustaria saber como puedo hacer
para que una vez ejecutado el procedimiento del otro libro regrese de nuevo al procedimiento original.
Respuesta Responder a este mensaje
#2 Fernando
19/03/2010 - 10:27 | Informe spam
Hola Hector:

Ese no es el problema, porque aunque yo coloque código antes del fin de la
instrucción el procedimiento acaba con la última instrucción de la macro del
otro libro. Se que existe una forma, que es creando un objeto "Excel", es
decir, abriendo otro libro (Set Excel as object) y de esta manera la macro se
ejecuta sin abandonar el procedimiento original, pero por otros motivos esta
opción no me vale.

No obstante muchas gracias y si se te ocurre otra posibilidad te agradecería
me lo comuniques.
saludos,

"Héctor Miguel" escribió:

hola, Fernando !

cuando una macro "llama" a otro procedimiento, se ejecuta el procedimiento llamado
al terminar la ejecucion de este "branch", la macro (regresa y) continua en la siguiente linea
en el caso del codigo que expones, "la siguiente" linea es: => End Sub

saludos,
hector.

__ OP __
> Tengo el siguiente procedimiento:
> Sub CopiarDatosTM1()
> On Error Resume Next
> FilePath = ThisWorkbook.Path & "\"
> ITV = Range("CentroTM1").Value
> FileDtno = FilePath & "iberica_DR.xls"
> Workbooks.Open FileDtno
> LibroDtno = ActiveWorkbook.Name
> Macro = LibroDtno & "!" & "CopyData"
> Application.Run Macro
> End Sub
> Como podeis ver este procedimiento llama a un procedimiento de otro libro.
> El problema es que cuando termina de ejecutar el procedimiento del otro libro
> no vuelve al procedimiento original y me gustaria saber como puedo hacer
> para que una vez ejecutado el procedimiento del otro libro regrese de nuevo al procedimiento original.


.

Respuesta Responder a este mensaje
#3 Héctor Miguel
19/03/2010 - 18:33 | Informe spam
hola, Fernando !

habria que conocer con detalles mas concretos las lineas que no se ejecutan despues de llamar a una macro en otro libro (p.e.)
a) cuando abres otro libro queda como "libro activo" y los objetos activos (activesheet, activecell, etc.) son los del libro abierto...
b) pudiera ser que la macro que se interrumpe es porque no encuentra "sus propios objetos" ???

he probado con dos libros, y un procedimiento en cada uno (sin el comportamiento que describes)

a) libro 1 (con esta macro)
Sub Llamar_proceso()
MsgBox "Se procesara una macro en Libro2 ..."
Application.Run "libro2!macro_en_libro2"
MsgBox "Se ha ejecutado el proceso llamado (no ?)"
End Sub

b) libro 2 (con esta macro)
Sub Macro_en_libro2()
MsgBox "Esta macro se ejecuta desde el Libro2"
End Sub

por si puedes comentar algun detalle mas descriptivo ?
saludos,
hector.

__ OP __
Ese no es el problema, porque aunque yo coloque codigo antes del fin de la instruccion
el procedimiento acaba con la ultima instruccion de la macro del otro libro.
Se que existe una forma, que es creando un objeto "Excel", es decir
abriendo otro libro (Set Excel as object) y de esta manera la macro se ejecuta
sin abandonar el procedimiento original, pero por otros motivos esta opcion no me vale.
No obstante muchas gracias y si se te ocurre otra posibilidad te agradeceria me lo comuniques...



__ previos __
cuando una macro "llama" a otro procedimiento, se ejecuta el procedimiento llamado
al terminar la ejecucion de este "branch", la macro (regresa y) continua en la siguiente linea
en el caso del codigo que expones, "la siguiente" linea es: => End Sub
Respuesta Responder a este mensaje
#4 Fernando
24/03/2010 - 13:06 | Informe spam
Hola Hector:

En primer lugar, muchas gracias por molestarte.
Te recuerdo el procedimiento:

Sub CopiarDatosTM1()
On Error Resume Next
FilePath = ThisWorkbook.Path & "\"
ITV = Range("CentroTM1").Value
FileDtno = FilePath & "iberica_DR.xls"
Workbooks.Open FileDtno
LibroDtno = ActiveWorkbook.Name
Macro = LibroDtno & "!" & "CopyData"
Application.Run Macro
End Sub

Como te decía, el problema es que aunque yo le meta más codigo después de la
última instrucción (Application.Run Macro), esta no regresa, una vez
ejecutada la macro en el otro libro, a la macro original. He probado tu
ejemplo y funciona correctamente. Puede ser que esto suceda porque la macro
llamada llama a su vez a otras macros?
No se si te ayudaría que te envíe el código, pero es bastante extenso. ¿Se
te ocurre alguna otra solución?
Saludos

"Héctor Miguel" escribió:

hola, Fernando !

cuando parece que todo vuelve a la normalidad...
la sincronia vuelve a hacer "gala de su ausencia" :-((

habria que conocer con detalles mas concretos las lineas
que no se ejecutan despues de llamar a una macro en otro libro (p.e.)
a) cuando abres otro libro queda como "libro activo" y los objetos activos
(activesheet, activecell, etc.) son los del libro abierto...
b) pudiera ser que la macro que se interrumpe
es porque no encuentra "sus propios objetos" ???

he probado con dos libros, y un procedimiento en cada uno
(sin el comportamiento que describes)

a) libro 1 (con esta macro)
Sub Llamar_proceso()
MsgBox "Se procesara una macro en Libro2 ..."
Application.Run "libro2!macro_en_libro2"
MsgBox "Se ha ejecutado el proceso llamado (no ?)"
End Sub

b) libro 2 (con esta macro)
Sub Macro_en_libro2()
MsgBox "Esta macro se ejecuta desde el Libro2"
End Sub

por si puedes comentar algun detalle mas descriptivo ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida