Con varios archivos

Me interesa saber como puedo insertar o copiar un mismo valor (o varios) en varios archivos a la vez. Los archivos están en un mismo directorio.

1 respuesta

Respuesta
1
Tal como lo pediste, aquí tienes una macro que desarrollé para que ejecute una determinada acción sobre varios libros.
Por una cuestión de aprovechamiento de memoria, huyo de abrir múltiples archivos. La macro trabajrá sola, pero de a un archivo por vez, hasta terminar con todos los que estén en el directorio.
Para su funcionamiento sólo necesitas crear un archivo nuevo que será un auxiliar para hacer la acción que deseas (copiar un valor o un rango de valores).
Este archivo debe tener una hoja llamada INICIO.
En ella, coloca en la celda C7 la dirección de la carpeta donde debe buscar todos los archivos.
En la celda C8, ingresa qué tipo de archivos debe considerar. Esto te permite, seleccionar algunos de los archivos del directorio indicado en C7. Así, por ejemplo, si quieres que sólo considere los archivos que empiezan con "Fact", coloca en esa celda:
Fact*.xls
Si quieres que traiga todos los archivos, simplemente deja en tal celda:
*.xls
La celda C9 permite que coloques una clave, en caso de que los archivos a abrir tuvieran la misma clave de protección para apertura.
Si no tuviesen clave, deja esa celda en blanco.
Como no dijiste, específicamente en qué hoja debe colocar el dato/s , la celda C10 recibirá tal dato.
Finalmente, la celda C11 tendrá el rango de el archivo auxiliar donde estarán los (o el) dato a copiar (por ejemplo B17:F52 de la hoja INICIO)
Graba este archivo auxiliar.
Ahora falta colocar la macro que hace el trabajo.
Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Sub Pegarango()
'==== Variables del sistema
Dim MiCarpeta As String, MisArchivos As String, MiClave As String
'manuales:
Hoja_dest = "DATOS"
Celda_ini = "B4"
'tomadas de Hoja Inicio:
MiCarpeta = Trim(Sheets("INICIO").Range("C7").Value) & IIf(Right(Trim(Sheets("INICIO").Range("C7").Value), 1) = "\", "", "\")
MisArchivos = Trim(Sheets("INICIO").Range("C8").Value)
MiClave = Trim(Sheets("INICIO").Range("C9").Value)
ElRango = Trim(Sheets("INICIO").Range("C11").Value)
DeHoja = Trim(Sheets("INICIO").Range("C10").Value)
With Application.FileSearch
.LookIn = MiCarpeta
.SearchSubFolders = True
.FileName = MisArchivos
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
Sheets(Hoja_dest).Select
Range(Celda_ini).Select
For i = 1 To .FoundFiles.Count
DirFile = .FoundFiles(i)
Workbooks.Open FileName:=DirFile, Updatelinks:=False, PASSWORD:=""
Application.Calculation = xlManual
ActiveWorkbook.Unprotect PASSWORD:=MiClave
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'* TAREA A EFECTUAR en archivo: PEGAR SECUENCIALMENTE RANGO DE CADA ARCHIVO
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'Application.ScreenUpdating = False
Application.CutCopyMode = False
ActiveWindow.ActivatePrevious
Sheets("INICIO").Select
Range(ElRango).Copy
ActiveWindow.ActivateNext
Sheets(Hoja_dest).Select
With Selection
.PasteSpecial Paste:=xlValues
.PasteSpecial Paste:=xlFormats
End With
'ActiveSheet.Paste '<- Activa este si quieres que
'pegue los datos copiados tal como están en archivo
'de origen (y desactiva las cuatro lineas anteriores)
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close False
Sheets("INICIO").Select
Application.ScreenUpdating = True
'=============================================================
' FIN tarea en archivo
'=============================================================
Next i
MsgBox i - 1 & " ARCHIVOS MODIFICADOS"
Else
MsgBox "No se encontró ningún archivo " & MisArchivos & " en " & Chr(10) & MiCarpeta
End If
End With
End Sub
Notarás que la mayoría de los datos están parametrizados, es decir que podrás cambiar la información en las variables sin tener que modificar el procedimiento. Un par se cargan dentro del código y, el resto, las toma de la hoja INICIO
Cierra el editor de visual basic y graba el archivo.
Hacia la mitad de la macro notarás que está indicada cuál es la tarea que debe realizar en cada archivo.
De esta manera, si otro día quieres hacer otra cosa con varios archivos en un directorio, bastará que coloques el código a ejecutar en este lugar.
El toque final sería colocar un botón en la hoja INICIO para activar la macro.
Para esto, una vez copiada la macro en el archivo, muestra la barra de herramientas de "Formularios" ("Ver" | "Barras de herramientas" | "Formularios".
De ella, toma el icono de "botón" y dibújalo en tu hoja. Al haber presionado el icono, el cursor del mouse se transformará en una cruz fina. Mantén presionado el botón derecho y arrástralo hasta donde desees dibujando el botón.
Cuando sueltes la tecla, automáticamente aparecerá la lista de macros disponibles de dónde podrás seleccionar el que quieres asociar. Simplemente, dale doble click.
También, puedes cambiar la vinculación de un botón con una macro, dando click derecho sobre él y eligiendo "Asignar macro". Otra vez, la lista de macros disponibles te permitirá realizar tal asignación.
Listo. Tienes un archivo que abrirá uno de los que te mandaron. Copiará el rango indicado, grabará el archivo de destino y luego lo cerrará. Posteriormente, hará lo propio con el siguiente y así, hasta terminar con todos los indicados.
Sugerencia: Usa un directorio provisorio con dos o tres copias de los archivos originales para asegurarte de que el proceso sea correcto.
Si todo está bien. Cambia el directorio en la celda que te indiqué para que trabaje sobre los archivos reales.
Esto debería resolver tu pregunta. Si así fuera, ya sabes qué hacer ;)
Aclarando qué entendí mal o qué faltó.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas