Macro - Traspasar Datos de un libro a otro en excel

Tengo el siguiente trabajo que debo realizar te explico:
Tengo una hoja en excel donde quiero guardar todos los datos que me envían vía mail a través de un archivo excel, lo que quiero hacer es crear una macro en donde yo pueda aplicar la macro en el archivo que me envían y traspasar esos datos al otro archivo excel donde tendré almacenado todos los datos, la macro tendrá que verificar la ultima fila vacía y ahí copiar los datos para que estos se vayan acumulando, espero que haya te quedado clara mi pregunta espero tu respuesta desde ya gracias.
Nota: la hoja donde me envían datos contiene 5 columnas (o campos) y tiene filas variables (donde están los datos).
Respuesta
1
Yo la macro la tendría en tu archivo.
El que te envían lo dejas en cierta ruta...
Al ejecutar la macro que te pida seleccionar el fichero de datos y que te los inserte
1.- para saber si cual es la primera fila de datos vacía en tu libro tendras que hacer
haydatos = true
i=0
do while haydatos
     i = i + 1
     if len(range("A" & i)) = 0 then hayDatos=false
 loop
el valor i cuando salga del bucle es la primera fila vacia
2.- para que te pida el fichero
Public Sub fichero()
Dim ruta As String
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show
        ' Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            ruta = Application.FileDialog(msoFileDialogOpen).SelectedItems(lngCount)
        Next lngCount
    End With
    Workbooks.Open ruta
-- a partir de aqui lees lo que necesites y a copiar y pegar de uno a otro  
    If Workbooks(2).Worksheets("Hoja1").Range("A1") = "Hola" Then
        MsgBox Range("A1")
    Else
        MsgBox "Sin datos"
    End If
Sabiendo que tu libro siempre sera Workbooks(1) y el que abres desde la macro será Workbooks(2) y siguientes...
Gracias por responder a la brevedad muy buena solución pero debo aclararte algo, que obligadamente tengo que pasar los datos desde el archivo que me envían, te preguntaras porque bueno te explico:
Lo que pasa es que el archivo que me envían tengo que arreglarlo ya que la información viene en tablas, cual es el problema en esto, es que las tablas vienen separadas y ademas hay celdas en blanco que hay que completar, esto hay que hacerlo claramente con macros, entonces la idea es que cuando aplique la macros pueda tener una sola tabla con toda la información y de ahí mismo aplicar otra macro para traspasar esos datos al otro libro donde se acumulará la información, lo que te acabo de decir es más menos así
Truck         Duration         Error Code
CE_01      0:01:10                6424  
                                            4070 
CE_04 0:00:15 6424
Si te das cuenta al error code 4070 le falta el truck y la duration entonces tengo que hacer una macro que me copie el truck y la duration de arriba y dejarlo así
CE_01 0:01:10 6424
CE_01      0:01:10                 4070 
CE_04 0:00:15 6424
Entonces para trabajar en una sola ventana y no andar cambiándome necesito trabajar a través de este archivo que me envían espero que me hayas entendido y espero tu respuesta y gracias nuevamente
Lo que yo te he respondido, dándole un ligero retoque, lo podrás ejecutar desde el fichero que te envían.
Gracias por tu código pero como hago para autocompletar la información de las celdas vacías con la ultima información de arriba disponible
de esto:
Truck         Duration         Error Code
CE_01      0:01:10                6424  
                                            4070 
CE_04 0:00:15 6424
A esto
Truck         Duration         Error Code
CE_01 0:01:10 6424
CE_01 0:01:10 4070
CE_04 0:00:15 6424
Hay que tener en cuenta que hay más celdas vacías entre medio de otra información y lo que quiero es que en donde están las celdas vacías se completen o copien la información del ultimo truck y duración como mostré anteriorme
quizás se presente esta situación
Truck         Duration         Error Code
CE_01      0:01:10                6424  
                                            4070 
                                            506d
                                            8054
                                             6010
                                             304d
                                             443a
CE_04 0:00:15 6424
Entonces en las celdas que faltan (en truck y duration) se copia la ultima información disponible de truck y duraction en este caso en las celdas vacías se copiarían los datos de CE_01 y 0:01:10 en todas las celdas correspondientes al campo (truck o duration) espero te haya quedado claro eso seria amigo gracias por ty ayuda y espero tu respuesta.
Almacen el valor de truck y duration en sendas variables
suponiendo que las tienes en las columnas a y b haces lo siguiente
(Te pongo ejemplo para el truck)
dim truckAnterior as string
truckAnterior = ""
sheets("hojaDestino").range("A1")=range("A1")
truckanterior = range("A1")
if len(range("A2"))<>0 then
    sheets("hojaDestino").range("A2")=range("A2")
    truckanterior = range("A2")
else
    Sheets("hojaDestino"). range("A2")=trunckanterior
endif
y asi sucesivamente. Cada vez que se quede vacío usas el anterior, cuando venga un valor actualizas la variable y continuas...
Gracias por tu respuesta tan rápida excelente solución la que me diste también gracias, pero quiero consultarte otra cosa disculpa lo catete pero con esto termino como puedo hacer lo ultimo lo de los inputbox o sea que me aparezca un inputbox que me diga ingrese fecha y la fecha que ingrese se copie en una columna nueva hasta la ultima fila donde estén los datos, eso es lo ultimo amigo disculpa por las molestias espero me respondas como lo has hecho hasta ahora, esperare tu respuesta y te calificare muy bien no lo dudes gracias
De la misma forma. EL resultado del inputbox lo almacenas en una variable de tipo string
dim fecha as string
fecha = inputBox("Dime la fecha de proceso: ")
Luego en la celda que necesites le vas rellenando la fecha (por ejemplo range("D1") = fecha) en cada linea que vas procesando y vas copiando en tu libro además haces esta asignación y ya lo tienes
así lo tienes

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas