Macro para abrir un archivo

Saludos; mi problema es el siguiente: Tengo una hoja de cálculo en donde hay una columna que contiene códigos correspondientes a diferentes empresas y otras columnas que contienen datos relacionados a la misma empresa (es decir la información correspondiente a cada empresa es una fila). Ademas tengo grabados varios archivos cuyos nombres son precisamente esos códigos. Quiero hacer una macro que haga lo siguiente:
1. Abra en forma secuencial cada uno de los archivos según aparezca su nombre en la columna que contiene los códigos.
2. Copie el contenido de cada fila en el archivo correspondiente.
En resumen la macro tiene que abrir el archivo cuyo nombre es el código que sigue, copiar la fila correspondiente en el archivo que abre y proseguir con el siguiente código en la columna. La cantidad de códigos es aproximadamente 40. Ojala puedan ayudarme. Gracias

1 respuesta

Respuesta
1
Podría desarrollarte la rutina para esto... pero me temo que luego me hagas modificarla para ajustarla a tus libros.
Por lo tanto, indicame estos datos que faltan:
1- En qué col estará la lista de cód y en cuál los datos a mover
2- En qué hoja (¿la primera?) Y en qué celda se volcarán los datos
Quedo a la espera de tus aclaraciones
Hola Elsa gracias por el interés, la lista de códigos estarán en la columna A de la primera hoja. Por ejemplo:
           A B C
1 Código Empresa Carga
2 4587 Juan S.A. 4475
3 9864 Ejemplo S.A. 4564
4 4587 Juan S.A. 5487
Lo que deseo es que para el caso de la empresa Juan S.A. se abra el libro de nombre 4587 y se guarden las dos observaciones correspondientes a la empresa Juan S.A. (filas 2 y 4) en las siguientes filas vacías de la hoja 1 del libro 4587.
La rutina previamente ordena la lista por la col A, para poder pasar todos los datos que coincidan con el mismo cód.
Otro modo sería pasar 1 x 1 pero temo que sea algo lenta.
Entrá al Editor, insertá un módulo y copiá el siguiente código. Ajustá el rango inicial y la ruta de tu carpeta. También ajustá el rango a ordenar si habrá más datos en col sgtes a la C
Sub buscalibros2()
'x Elsamatilde
'guardo datos que necesitaré más adelante
ruta = "C:\Documents and Settings\user\Mis documentos\libroscodigos\"
libro1 = ActiveWorkbook.Name
'ultima fila con datos en hoja activa
finlista = ActiveSheet.Range("A65536").End(xlUp).Row
'ordeno lista
    Range("A2:C" & finlista)
.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Application.ScreenUpdating = False
codi = ""
libro2 = ""
'recorro a partir de A2
ActiveSheet.Range("A2").Select
While ActiveCell <> ""
'controlo si es del mismo código, la 1ra vez será <>
If ActiveCell <> codi Then
    'controlo si hay algún libro para cerrar
    If libro2 <> "" Then
        Workbooks(libro2).Close True
        libro2 = ""
    End If
    'guardo el cód activo
    codi = ActiveCell.Value
    'abro el libro
    On Error GoTo noesta
    Workbooks.Open ruta & ActiveCell.Value
    libro2 = ActiveWorkbook.Name
    ActiveWorkbook.Sheets(1).Select
    finrgo = ActiveSheet.Range("A65536").End(xlUp).Row + 1
    'vuelvo al libro1 para recorrer la col A
    Workbooks(libro1).Activate
End If
ActiveCell.Offset(0, 2).Copy Destination:=Workbooks(libro2).Sheets(1).Cells(finrgo, 1)
'repetir para otras celdas de otras col
finrgo = finrgo + 1
GoTo sigo
noesta:
MsgBox "No se actualizó el libro " & ActiveCell.Value & " en la carpeta indicada. Se continua con el resto"
sigo:
ActiveCell.Offset(1, 0).Select
Wend
On Error Resume Next
Workbooks(libro2).Close True
End Sub
Sdos. Si todo quedó resuelto no olvides finalizar la consulta
Hola Elsa, al ejecutar la macro solo me copia la columna C en cada libro no me copia toda la fila es decir: para la empresa JUAN S.A. me copia solo los datos 4475 y 5487 correspondientes a la carga en el libro 4587, no me copia toda la fila 1 y toda la fila 3. Ojala puedas decirme a que se debe esto. Espero tu respuesta.
Elsa además actualicé el rango como tu dices en la fila correspondiente a :
Range("A2:C" & finlista).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Coloque:
Range("A2:H" & finlista).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Debido a que la ultima columna donde hay datos es la H, pero la macro me sigue copiando solo los datos correspondientes a la columna C.
Buscá esta instrucción en tu macro:
ActiveCell.Offset(0, 2).Copy Destination:=Workbooks(libro2).Sheets(1).Cells(finrgo, 1)
'repetir para otras celdas de otras col
Allí te dejé el mensaje para que repitas para el resto de los campos . Si no aclaran en la consulta qué campos y en qué posición deben ser volcados, debo dejarle la tarea al usuario.
Por ej, para copiar la col H en la 3er col será:
ActiveCell.Offset(0, 3).Copy Destination:=Workbooks(libro2). Sheets(1). Cells(finrgo, 3)
El Offset te ubica a tantas col de la col inicial, que en tu caso es A
La instrucción Cells(fila, col) indica en qué col se ubicará.
Si necesitas copiar la fila completa incluyento el código, reemplazá esa instrucción por esta otra:
ActiveCell.EntireRow.Copy Destination:=Workbooks(libro2).Sheets(1).Cells(finrgo, 1)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas