Macro para guardar registros

Fíjate que tengo un pequeño problema, espero me puedas ayudar.
No se si recuerdes que me ayudaste con un código para copiar y pegar registros de un archivo a otro (prueba nadin), funciona muy bien, y ya le metí ciertas cosas para que los datos los acomode en un orden requerido, el punto es que quisiera tener un consolidado de todos los archivos cargados en el archivo "prueba nadin", osea, cada que cargo un archivo pues se borra la información del anterior, yo quisiera que la macro la copiara y la pegara debajo, y se mantuviera almacenada, y que cada que copie un archivo nuevo, igual copie y pegue la información para tener todo consolidado.
En este caso, la información que quiero copiar y guardar va de "A8:C23". No se como definir eso, para que vaya pegando digamos que por bloques, y sobre todo no me encime información al momento de hacer el pegado de los últimos registros copiados.
Pienso que podría ser algo así: que corte la información de "A8:C23", y la pegue en "A24", después si cargo otro archivo, igual que corte la información de "A8:C23", y lo lógico seria que la pegara después de "A39", y así sucesivamente, el tamaño de mis registros siempre es el mismo ("A8:C23".

1 respuesta

Respuesta
1
Pues eso es fácil mira pones en el principio de la macro estas instrucciones para que se sitúe en la siguiente celda libre:
Suponemos que es la primera vez que vas a importar los datos, tendrás la hoja vacía en entonces nos situamos en la celda A8 para comenzar a pegar:
If Range("A8").Value="" Then
Range("A8").Select
Else
Range("A8").End(xlDown).Offset(2,0).Select
End If
Estas instrucciones al principio de la macro comprueban si la celda A8 esta vacía, si es así comienza a pegar los valores a partir de ella, pero si ya tienes valores en A8 se desplazará hasta el final y dejará 2 filas en blanco para comenzar a pegar.(Por dejar una separación entre una importancion y la otra.
Si te ha servido puntúa, comenta y finaliza la consulta. Gracias.
>Un saludo
>Julio
Gracias experto, el código que me has enviado, si se sitúa en la segunda celda después de la información, pero no me guarda digamos la información.
Te pongo el código, y te explico como es que quisiera que realizara el copiado y pegado una vez cargado el archivo.
Range("F2").Select
    Mes = InputBox("ej: 8/22/2009", "Fecha de archivo")
    ActiveCell.Value = Mes
  Range("F2").Select
    Selection.Copy
    Range("A8:A23").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
If Range("A8").Value = "" Then 'funcion que me has enviado
Range("A8").Select
Else
Range("A8").End(xlDown).Offset(2, 0).Select
End If
Application.ScreenUpdating = False
Application.Dialogs(xlDialogOpen).Show
nombre = ActiveWorkbook.Name
ActiveSheet.Range("B20:F27").Select
    Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("B7").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
Windows(nombre).WindowState = xlMaximized
ActiveSheet.Range("B35:G37").Select
    Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("B15").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
Windows(nombre).WindowState = xlMaximized
ActiveSheet.Range("B43:G44").Select
    Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("B18").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
Windows(nombre).WindowState = xlMaximized
ActiveSheet.Range("B48:G51").Select
    Selection.Copy
Windows(nombre).WindowState = xlMinimized
ActiveSheet.Range("B20").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
Una vez que termina ya de cargar los datos, yo quisiera que esos datos cargados, en este caso los datos de "A8:C23", los copie y los pegue en este caso en "A25", en este caso dejar libres las celdas "A8:C23", para después cargar otro archivo, ejecute el código de copiar y pegar registros, y vuelva a seleccionar "A8:C23", corte esos datos y los pegue debajo de los datos que cargé anteriormente, un tipo ciclo, en cuestión de que cada que suba datos al archivo los corte y pegue después del ultimo registro.
Espero haberme dado a entender.
De antemano gracias
Toño
Bien entonces no era lo que antes me habías dicho ahora quieres otra cosa, en fin debería de funcionar así:
If Range("A25").Value<>"" Then
Range("A25").End(xlDown).End(xlToRight).Select
Range("A25", ActiveCell).Cut
Range("A25").End(xlDown).Offset(1,0).Select
ActiveCell.PasteSpecial
Range("A8:C23").Cut
Range("A25").PasteSpecial
Else
Range("A8:C23").Cut
Range("A25").Select
ActiveCell.PasteSpecial
End If
Estas instrucciones tienes que ponerlas después de que has llevado los datos al rango A8:C23, para que las siguientes veces ya se ejecuten como quieres.
>Un saludo
>Julio
Gracias experto, funciona el código, pero tengo un pequeño problema, fíjate que el código que me enviaste lo adapte para que me guarde consecutivamente información de 4 cuentas, te pongo el código:
If Range("A25").Value <> "" Then
Range("A25").End(xlDown).End(xlToRight).Select
Range("A25", ActiveCell).Cut
Range("A25").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Range("A8:C9").Cut
Range("A25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
Range("A8:C9").Cut
Range("A25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
If Range("E25").Value <> "" Then
Range("E25").End(xlDown).End(xlToRight).Select
Range("E25", ActiveCell).Cut
Range("E25").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Range("A10:C12").Cut
Range("E25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
Range("A10:C12").Cut
Range("E25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
If Range("I25").Value <> "" Then
Range("I25").End(xlDown).End(xlToRight).Select
Range("I25", ActiveCell).Cut
Range("I25").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Range("A13:C14").Cut
Range("I25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
Range("A13:C14").Cut
Range("I25").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
If Range("M23").Value <> "" Then
Range("M23").End(xlDown).End(xlToRight).Select
Range("M23", ActiveCell).Cut
Range("M23").End(xlDown).Offset(1, 0).Select ''****Aqui me genera error
ActiveSheet.Paste
Range("A15:C15").Cut
Range("M23").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Else
Range("A15:C15").Cut
Range("M23").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
En los tres pimeros módulos de código funciona muy bien, me guarda y acomoda los registros que voy cargando, pero en el cuarto if, el de M23, no funciona, me marca un error, ya le he cambiado el parámetro de registro y tampoco funciona. Parece que se sigue de lleno al momento de cortar lo que hay en este caso en M23, y no se detiene en la tercer columna, tal y como lo hace con los módulos anteriores.
Espero me puedas ayudar a resolver esto.
Un saludo
Toño
Muchas gracias por tu ayuda.
La sintaxis:
Range("M23").End(xlDown).Offset(1, 0).Select
Significa que se sitúe en la celda siguiente¨:
1º Parte desde la ceda M23
2º Ahora se desplaza hasta la ultima fila con datos de esa Col (M) .End(xlDown) y baja una fila más para encontrarse en la primera fila vacía para pegar los valores copiados, repasaté los valores desde M23 hacía abajo para comprobar donde se situará la macro.
Por supuesto que debe haber valores en M23 hacia abajo si no claro que dará problemas no sabe donde pararse.
>Un saludo
>Julio
Efectivamente experto, tienes toda la razón sobre el por que estaba fallando el código, pero ya lo he solucionado a través de los registros y ahora funciona a la perfección.
Gracias por tu ayuda!
Saludos
Toño

Añade tu respuesta

Haz clic para o