Visual Basic para Aplicaciones - Application.Run

Life is soft - evento anual de software empresarial
 
Vista:

Application.Run

Publicado por Manuel Sánchez (8 intervenciones) el 04/03/2008 22:35:53
Tengo un libro que se llama por ejemplo HOLA.xls con una tabla donde escribo por ejemplo en la celda A1 pongo 1, en la celda A2 pongo 3 y en la celda A3 pongo 7.

Luego tengo libros aparte por cada número del 1 al 10 (1.xls, 2.xls, 3.xls, etc... hasta 10.xls)

En HOLA.xls ejecuto una macro que hace lo siguiente:

Busca en A1, y si encuentra 1, abre el libro 1.xls y dentro de ese libro ejecuta otra macro (que lo que hace es copiar los datos que hay en HOLA.xls y pegarlos en 1.xls), y una vez finalizada la macro en 1.xls, se guarda el libro y se cierra; y si no encontrara el 1, pues pasaría a buscar el 2, y si no lo encontrara pasaría a buscar el 3, y así sucesivamente, abriendo solo los libros que encontrara en la lista., y así hasta llegar a A3.

Digamos que esto lo quiero usar porque yo en HOLA.xls volcaré unos datos de otro programa, y ejecutando la macro, que esos datos me los reparta en diferentes libros, y una vez repartidos en dichos libros, que dentro de ellos ejecute otra macro para ordenarlos.

Utilizo el código Application.Run(Libro,Nombre de la macro).

Mi problema viene ahora:

cuando encuentra el primer número en A1, por ejemplo el 2; me abre el libro 2.xls, me ejecuta la macro que hay dentro de dicho libro 2.xls, se guarda y se cierra, pero al volver a HOLA.xls, no sigue con la macro para buscar los siguientes números en A2 y A3. Digamos que se corta la macro.

No se si me he explicado con claridad, o es un poco follón todo lo que aquí he escrito jajaja.

Muchas gracias de antemano, si me puedieran ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Application.Run

Publicado por JuanC (243 intervenciones) el 08/03/2008 17:08:47
todo bien, pero habría q ver el código y depurarlo...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Application.Run

Publicado por Manuel Sánchez (8 intervenciones) el 12/03/2008 19:52:15
COMO ESTOY APRENDIENDO, NO SE SI EL CÓDIGO SERÁ MUY COMPLICADO O QUE, LA CUESTIÓN ES QUE ME FUNCIONA (IGUAL SE PRODÍA HACER MEJOR).
ESTO SE REPETIRÍA POR CADA NÚMERO DEL 1 AL 10
ESPERO QUE TE SIRVA.

Sub 1()

Dim fila As Integer
Dim fila2 As Integer
Dim n As Integer
Dim m As Integer

fila = 1
fila2 = 3

Range("Q2").Select

For n = 1 To 200

If ActiveCell.Offset(fila, 0).Value <> "1" Then
Exit For
Else
Workbooks.Open("C:xxxYYYzzz1.xls").Activate
Sheets("---").Select

Workbooks("HOLA.xls").Activate
Sheets("hoja1").Select
Range("Q2").Select

For m = 1 To 49

If ActiveCell.Offset(fila, 0).Value = "1" Then
Range("AA" & fila2, Range("AA" & fila2).End(xlToLeft)).Select
Selection.Copy

'Busca la última celda vacía
Workbooks("1.xls").Activate
Sheets("---").Select
Range("D2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, -1).Range("A1").Select

ActiveSheet.Paste
Range("A1").Select
Workbooks("HOLA.xls").Activate
Sheets("hoja1").Select
Application.CutCopyMode = False
Range("AB" & fila2).Value = "."
Range("Q2").Select

End If

fila = fila + 1
fila2 = fila2 + 1

If Workbooks("1.xls").Sheets("---").Range("D49").Value <> "" Then
Exit For
End If

If m = 49 Then
Workbooks("1.xls").Activate
Sheets("---").Select
Application.Run "'MT1 Ø10.xls'!Actualizar"
End If

Next

End If

Next

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Application.Run

Publicado por Manuel Sánchez (8 intervenciones) el 12/03/2008 20:04:06
CREO QUE YA SE DONDE ESTA EL ERROR.

fila = 1
fila2 = 3

Range("Q2").Select

For n = 1 To 200

If ActiveCell.Offset(fila, 0).Value <> "1" Then
Exit For
Else

QUE COMO PONGO: SI LA PRIMERA FILA ES DIFERENTE DE 1, QUE SE CORTE EL CONTADOR; ENTONCES CLARO, ENCUENTRA EL 1, EJECUTA LA MACRO; PERO CUANDO BUSCA EL 2, COMO LA PRIMERA FILA SIGUE SIENDO 1, PUES SE CORTA EL CONTADOR DEL 2, PORQUE EN EL Sub 2 AL PONER:

If ActiveCell.Offset(fila, 0).Value <> "2" Then
Exit For
Else

NO SE SI ME HE EXPLICADO.

REALMENTE HICE ESTO PORQUE NO SE COMO SE HACE LO SIGUIENTE:

if 'si una cosa es tal' then
nada
Else
'lo que sea'
end if

VAMOS QUE EN VEZ DE QUE CORTE EL CONTADOR, QUE NO HAGA NADA.
ES COMO UTILIZAR EN EXCEL =SI(A1=A2;"";"HOLA")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar