Con el tiempo, es muy fácil crear y recopilar una gran cantidad de libros de Excel. Suponga que tiene muchos libros de trabajo en los que necesita hacer el mismo cambio. Por ejemplo, es posible que deba cambiar el valor almacenado en la celda A10 de cada una de las hojas de trabajo en cada uno de los libros de trabajo.

Si solo tenía unos pocos libros de trabajo para cambiar, la tarea es bastante fácil: cargue cada libro de trabajo y, a su vez, realice el cambio en cada uno de ellos. Si tiene un par de cientos de libros de trabajo en los que se debe realizar el cambio, la tarea se vuelve más formidable.

Si prevé que solo necesitará realizar esta tarea una vez, la solución más sencilla es crear un archivo de texto que contenga la ruta y el nombre de archivo de cada uno de los libros de trabajo, un libro de trabajo por línea. Por ejemplo, puede terminar con un archivo que tenga entradas como esta:

c:\myfiles\first workbook.xls c:\myfiles\second workbook.xls c:\myfiles\third workbook.xls

El archivo puede tener tantas líneas como sea necesario; realmente no importa. Lo importante es que cada línea sea una ruta y un nombre de archivo válidos, y que no haya líneas en blanco en el archivo.

Puede crear fácilmente un archivo de este tipo mostrando una ventana de símbolo del sistema, navegando al directorio que contiene los libros de trabajo y emitiendo el siguiente comando:

dir /b > myfilelist.txt

Cada archivo del directorio termina en el archivo myfilelist.txt. Deberá cargar el archivo de texto en un editor de texto y verificarlo para poder eliminar entradas superfluas. (Por ejemplo, myfilelist.txt terminará en la lista). También deberá agregar el nombre de la ruta al principio de cada línea en el archivo.

Una vez que el archivo esté completo, puede iniciar Excel y usar una macro para leer el archivo de texto, cargar cada libro de trabajo enumerado en el archivo de texto, recorrer cada hoja de trabajo en ese libro de trabajo, realizar el cambio apropiado y guardar el libro de trabajo. La siguiente macro realizará estas tareas muy bien.

Sub ChangeFiles1()

Dim sFilename As String     Dim wks As Worksheet

Open "c:\myfiles\myfilelist.txt" For Input As #1     Do While Not EOF(1)

Input #1, sFilename  ' Get workbook path and name         Workbooks.Open sFilename

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True     Loop     Close #1 End Sub

Si bien este enfoque funciona muy bien si solo tiene que procesar un solo lote de archivos de libro de trabajo, se puede hacer mucho más flexible si prevé la necesidad de realizar tales cambios en el futuro. El mayor problema, por supuesto, es armar el archivo myfilelist.txt cada vez que desee procesar un lote de archivos. Se agrega flexibilidad si la macro pudiera simplemente usar un directorio y luego cargar cada libro de trabajo desde ese directorio.

Sub ChangeFiles2()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String     Dim wks As Worksheet

' Change directory path as desired     dirName = "c:\myfiles\"



MyPath = dirName & "*.xls"

MyFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

Esta macro utiliza cualquier directorio que especifique para la variable dirName.

Cualquier archivo de libro de trabajo (que termine con la extensión .Xls) se carga y procesa.

Otro enfoque es hacer que la macro pregunte al usuario qué directorio debe procesarse. Puede utilizar el cuadro de diálogo Archivo de Excel estándar para hacer esto, de la manera que se muestra en la siguiente macro.

Public Sub ChangeFiles3()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String

With Application.FileDialog(msoFileDialogFolderPicker)

' Optional: set folder to start in         .InitialFileName = "C:\Excel\"

.Title = "Select the folder to process"

If .Show = True Then             dirName = .SelectedItems(1)

End If     End With

MyPath = dirName & "\*.xls"

myFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3176) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Making_Changes_in_a_Group_of_Workbooks [Realización de cambios en un grupo de libros de trabajo].