Macro en Excel archivo a archivo

Como bien dice el titulo, necesito la confección de una Macro que realice lo siguiente en el archivo A.xls
1) En A.xls en la hoja "dato" tiene que copiar el valor de C4.
2) Abrir B.xls y en la hoja "Cal" pegar el dato en B130. A su vez, tiene que bajar una celda, puesto que al otro día tiene que volver a hacer el mismo proceso.
3) Cerrar B.xls y volver a A.xls en donde en C5 copiara el dato nuevamente, pero esta vez lo enviara a C.xls y pegara en ese archivo en la celda B135.
Así, sucesivamente. El tema es que son 66 datos que tiene que sacar de A.xls (desde C4:C66) y pegarlo en diferentes archivos...
No se si se puede hacer una sola macro o tener que escribir en VB 66 veces la misma sentencia.

1 respuesta

Respuesta
1
1 sola) pero necesito saber cómo sabrá Excel qué libros debe abrir.
Se puede recorrer una lista fija, por macro, o recorrer 1 col en alguna hoja del libro A (recomendable)
Espero tus aclaraciones
Elsa, antes que todo, gracias por acudir a mi rescate. Ahora
Supongams, que sencillamente se hace una macro con estos datos:
1) En A.xls en la hoja "dato" tiene que copiar el valor de C4.
2) Abrir B.xls y en la hoja "Cal" pegar el dato en B130. A su vez, tiene que bajar una celda, puesto que al otro día tiene que volver a hacer el mismo proceso.
3) Cerrar B.xls y volver a A.xls.
Desde ya, y nuevamente, muchísimas gracias
Si te la dejo tal como me la pedís ahora, mañana tendrás una nueva consulta que hacer.
Así que te la armé más acorde a tu primer consulta, solo resta saber cómo le indicarás el nbre de los libros. En el ejemplo lo toma de la col siguiente.
El ejemplo es amplio, podes ajustar a partir de aquí tu propia rutina.
Sub CopiaCeldas()
' Macro desarrollada el 15/05/2009 por Elsamatilde
fin = 6
Range("C4").Select
'recorremos la col C hasta la fila 'fin'
While ActiveCell.Row <= fin
nbre = ActiveCell.Offset(0, 1).Value 'NOTA(*)
Selection.Copy
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & nbre
ActiveWorkbook.Sheets("Cal").Select
ActiveSheet.Range("B130").Select 'NOTA(**)
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Select
ActiveWindow.Close True 'cierra guardando los cambios
'repite el bucle para otro libro
ActiveCell.Offset(1, 0).Select
Wend
Application.CutCopyMode = False
End Sub
'* ver de qué modo se puede ir indicando el nbre de cada libro
'en este ejemplo los nbres están en col D, ej: B.xls para C4
'** aquí debiera buscar cuál ha sido la última fila ocupada
'porque al otro día la rutina le vuelve a decir que coloque en B130
fila2 = ActiveSheet.Range("B65536").End(xlUp).Row + 1
ActiveSheet.Range("B" & fila2).Select '(**)
Estimada Elsa, gracias a tu intervención, hasta ahora, puede realizar lo siguiente.
Sub Macro2()
'
' Macro2 Macro
' Macro grabada el 18/05/2009 por Diego Reyes
'
'
Range("C4").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\Documents and Settings\dreyes\Mis documentos\XLS_ANDRES_Qpro\ANDRES\1CALL.xls"
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("B132").Select
Application.CutCopyMode = False
fila2 = ActiveSheet.Range("B65536").End(xlUp).Row + 1
ActiveSheet.Range("B" & fila2).Select
ActiveWindow.Close True
Range("C5").Select
End Sub
En el cual realiza el copiado y pegado de un dato, de un archivo al otro. Volviendo al archivo principal para realizar la próxima copia para su posterior pegado en otro archivo. Como veras, en el archivo A.xls toma el valor de C4, abre el archivo 1CALL.xls, pega el valor, graba y cierra y vuelve al archivo A.xls C5.
Quisiera saber si este proceso, tengo que repetirlo 66 veces, o si existe la posibilidad de hacerlo en algo más breve.
Como veras, así es el archivo A.xls en donde cada celda tiene el dato que deberá ir a parar a su archivo correspondiente.
          B C
0
4 1CALL 1.070
5 ACIN 0.000
6 ALPA 0.258
7 BHIP 3.250
8 BRÍO 10.800
9 BMA 4.800
10 BURCAP 2.240
11 CADO 4.050
12 CAPX 78193.160
Y así, con 66 especies que el dato tiene que ir a su archivo correspondiente. Así como fue puesto el dato (1.070) del A.xls C4 en el archivo 1CALL.xls B130.
Espero ver sido claro, y desde luego, disculpame y desde ya, muchas gracias por tu atención...
La rutina así como estaba te recorre la col C desde fila 4 hasta que encuentre el registro de fila que ingresas en la variable 'fin', por lo tanto ya cumple con el objetivo de repetir el proceso para el resto de datos.
Lo que ahora ya podemos ajustar es el nbre del libro que veo se obtiene de la col B (dato que hasta ahora no me lo habías indicado).
Entonces la rutina te queda así:
Sub CopiaCeldas()
' Macro desarrollada el 15/05/2009 por Elsamatilde
ruta ="C:\Documents and Settings.......\"    'completar con tu ruta   'NOTA(**)
fin = 70        'NOTA (*)
Range("C4").Select
'recorremos la col C hasta la fila 'fin'   ver NOTA (*)
While ActiveCell.Row <= fin
nbre = ruta & ActiveCell.Offset(0, -1).Value & ".xls"       'NOTA(**)
Selection.Copy
Workbooks.Open Filename:=nbre
ActiveWorkbook.Sheets("Cal").Select         'NOTA(***)
ActiveSheet.Range("B130").Select
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Select
ActiveWindow.Close True 'cierra guardando los cambios
'repite el bucle para otro libro
ActiveCell.Offset(1, 0).Select
Wend 'esto repite el bucle hasta encontrar 1 celda vacía en col C
Application.CutCopyMode = False
End Sub
NOTA (*) : Se puede recorrer hasta encontrar 1 celda vacía en col C cambiándola x:
While activecell.value <> ""
NOTA (**) para que pueda usarse un bucle, la ruta debe ser la misma para todos. No te olvides la barra final.
NOTA (***) Ajustá el nbre de hojas o eliminá la línea si siempre abrirá en la hoja correcta.
Pruébala y comentame porque no la probé y quizás haya algún error de sintaxis.
Estimadisima Elsa, despues de realizar algunos ajustes con respecto a lo que me habias sugerido realizar, ha quedado de maravillas la macro.
Sub Ponedato()
' Macro desarrollada el 15/05/2009 por Diego
Application.ScreenUpdating = False
ruta = "C:\Documents and Settings\dreyes\Mis documentos\XLS_Qpro\Diego\"
fin = 69
Range("C4").Select
While ActiveCell.Row <= fin
nbre = ruta & ActiveCell.Offset(0, -1).Value & ".xls"
Selection.Copy
Workbooks.Open Filename:=nbre
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("B4").Select
Application.CutCopyMode = False
fila2 = ActiveSheet.Range("B65536").End(xlUp).Row + 1
ActiveSheet.Range("B" & fila2).Select
ActiveWindow.Close True
ActiveCell.Offset(1, 0).Select
Wend
Application.CutCopyMode = False
Range("A1").Select
End Sub
Me ha sido de muchísima ayuda tu intervención sobre todo en este largo proceso de aprendizaje que es el uso de macros. Excelente tus NOTAS que ha clarificado cada movimiento en la ejecución. Como veras, he aplicado algunas variantes para enriquecer la puesta en marcha, pero de base, te estoy altamente agradecido.
A tu entera Salud.
Diego.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas