Copiar número determinado de columnas a otro libro

Buenas tardes GRANPEKE,
Fíjate que yo estoy aprendiendo a hacer macros de 2 maneras:
1 leyendo un folleto de macros
2 tomando ejemplo de otras macros al ver el funcionamiento.
Pues tengo una macro que hace lo siguiente:
Toma todos los valores que se en cuentran en una hoja y los copia a otro libro que se llama Historial, esto lo hace a diario, llevando un registro por día de las transacciones efectuadas, pues la tengo de tal manera que me pasa toda la linea, pero lo que deseo es pasar solo 7 columnas de la A a la G, te pregunto ¿cómo debo modificar la macro para que pase las filas que contienen datos pero solo las 7 columnas?,
te copio la macro para que me indiques, como modificarla, y de verdad te agradecería que me dieras una pequeña explicación para poder seguir pescando en esto de las macros.
Sub Historial()
Dim uf As Long, uf1 As Long, filaini As Long
Ruta = "E:\Trabajos" 'Aqui indicas la unidad y el nombre de la carpeta donde estara el archivo Historial.xls
LIBRO = "Historial.xls" 'Aqui indique el nombre del archivo destino
ncol = 7'Numero de columnas de la BD.
filaini = 9
On Error Resume Next
Workbooks.Open Filename:=Ruta & "\" & LIBRO
Sheets("HojaHistorial").Activate
uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row
Windows("Captura_de_datos_1 (1).xls").Activate Sheets("Registro").Activate
uf = Range("A" & Cells.Rows.Count).End(xlUp).Row
Range(filaini & ":" & uf).Copy Workbooks("Historial.xls").Sheets("HojaHistorial").Range("A" & uf1 + 1)
'Range(Cells(9, 1), Cells(uf, ncol)).Copy Workbooks("Historial.xls").Sheets("HojaHistorial").Range("A" & uf1 + 1)
Windows("Historial.xls").Activate
MsgBox "Se han transferido los datos"
End Sub
De todo corazón José.

1 respuesta

Respuesta
1
Aquí te dejo la macro (sin modificación alguna) explicada (las explicaciones para el cambio que tienes que hacer te las doy al final)
Sub Historial()
    Dim uf As Long, uf1 As Long, filaini As Long
    Ruta = "E:\Trabajos"
'Aqui indicas la unidad y el nombre de la carpeta donde estara el archivo Historial.xls
    LIBRO = "Historial.xls" '
Aqui indique el nombre del archivo destino
    ncol = 7
'Numero de columnas de la BD.
    filaini = 9
    On Error Resume Next
   
'Abres el libro
    Workbooks.Open Filename:=Ruta & "\" & LIBRO
   
'Seleccionas la hoja HojaHistorial
    Sheets("HojaHistorial"). Activate
   
'Obtienes el número de la última fila ocupada de la columna A
'de la hoja activa del libro acrivo
    'Lo explico por parte (espero se entienda)
        'Cells. Rows. Count: entrega 65536, que es el numero de filas de la hoja
        'Range("A" & Cells. Rows. Count).End(xlUp): entrega la primera celda ocupada
            'dede abajo hacia arriba (indicado por End(xlUp)) partiendo de la celda
            'A65536 (dada por Range("A" & Cells. Rows. Count)).
        '. Row: Entrega el valor de fila en que se encuetra la celda
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row
   
'Activa la hoja Registro del Libro Captura_de_datos_1 (1).xls
    Windows("Captura_de_datos_1 (1).xls").Activate Sheets("Registro").Activate
   
'Lo mismo que uf1
    uf = Range("A" & Cells.Rows.Count).End(xlUp).Row
   
'Copias desde la fila 'filaini' hasta la fila 'uf'
    'de la hoja activa hacia un rango que parte desde la celda '"A" uf1 + 1'
    'de la hoja HojaHistorial del libro Historial.xls
    Range(filaini & ":" & uf).Copy Workbooks("Historial.xls").Sheets("HojaHistorial").Range("A" & uf1 + 1)

   
'Activas historial
    Windows("Historial.xls").Activate
'Envías mensaje :)
    MsgBox "Se han transferido los datos"
End Sub

----------------------------------
Más explicaciones...
Supongamos que filaini=9 y uf=20, la expresión
Range(filaini & ":" & uf) es equivalente a Range("9:20")
Con lo que estás reverenciando las filas 9 a 20 de la hoja activa.
Ahora, con los mismos valores, si quisiras referenciar el rango "A9:G20" debería quedar de la siguiente forma
Range("A9:G20") equivalente a Range("A" & filaini & ":G" & uf)
Ok querido pescador, vamos a pescar, si no sabes lo que tienes que hacer, me preguntas.
Genial,
Funciona de maravilla,
de todo corazón te agradezco muchísimo que me estés enseñando tan pacientemente,
tus explicaciones han sido tan claras, siento una gran satisfacción de haber encontrado una persona como tú,
de nuevo GRANPEKE muchísimas gracias, que Dios Todopoderoso te bendiga y te permita seguir manteniendo el don del querer ayudar a personas como yo,
he capturado otro pez,
de nuevo muchas gracias,
desde El Salvador en America Central
José.
Que tengas buenas noches amigo mio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas