Macro unir archivos de word en orden alfabético

He estado investigando y encontré una rutina que adapte para unir varios archivos de word en uno solo. Sin embargo no se como lograr que los archivos sean unidos alfabéticamente. La rutina que investigue es la siguiente:

Dim strFichero As String

Dim strRuta As String

Dim MiRango As Range

strRuta = "C:\Users\user\Dropbox\SISTEMA DE INFORMACIÓN\CARGAS LABORALES\formularios\"

strFichero = Dir$(strRuta & "\*.docx") Documents.Add

Do Until strFichero = ""

With Selection

.InsertFile FileName:=(strRuta & "\" & strFichero)

.Collapse wdCollapseEnd

.InsertBreak wdSectionBreakNextPage

End With

strFichero = Dir()

Loop Set MiRango = Nothing

La ayuda que solicito de ustedes es poder lograr que los archivos sean unidos pero de acuerdo al nombre de los mismos de manera que el archivo de word que se haya creado muestre dentro de él los archivos de la carpeta pero en orden alfabético.

1 Respuesta

Respuesta
1

No entendía porque daba algunos errores cuando ya había corregido algunas cosas que se veía que estaban mal. Al final me di cuenta de que no era una macro de Excel sino una macro de Word.

Pues lo que hay que hacer es leer primero todos los nombres de fichero, ordenarlos y abrirlos después.

He creado un array Lista de 200 elementos, si hay más ficheros pon un número mas grande.

Se ordenan por el método de la burbuja, si te resultará lento se podría pensar en meter los nombres de fichero en alguna tabla para poder usar el método Sort de Word, pero yo creo que será suficiente con esto.

Yo hice la prueba con el mismo fichero cambiado de nombre y no sé porque la orden dir ya me los daba ordenados. Haz tu la prueba para ver si te funciona ya que mi prueba no uso el método de ordenación.

Sub UnirFicheros()
Dim strFichero As String
Dim strRuta As String
Dim Lista(200), Auxi As String
Dim i, j, NuFi As Integer
strRuta = "C:\Users\user\Dropbox\SISTEMA DE INFORMACIÓN\CARGAS LABORALES\formularios"
strFichero = Dir(strRuta & "\*.docx")
Documents.Add
NuFi = 0
Do Until strFichero = ""
   MsgBox (strFichero)
   NuFi = NuFi + 1
   Lista(NuFi) = strFichero
   strFichero = Dir()
Loop
If NuFi > 0 Then
   For i = 1 To NuFi - 1
      For j = i + 1 To NuFi
         If Lista(i) > Lista(j) Then
            Auxi = Lista(i)
            Lista(i) = Lista(j)
            Lista(j) = Auxi
         End If
      Next j
   Next i
   For i = 1 To NuFi
      With Selection
         .InsertFile FileName:=(strRuta & "\" & Lista(i))
         .Collapse wdCollapseEnd
         .InsertBreak wdSectionBreakNextPage
      End With
   Next
End If
End Sub

Cópiala toda entera porque en algunas líneas que quedan del original ha habido que corregir fallos.

Y eso es todo, espero que te sirva y lo hayas entendido. Si no, pídeme aclaraciones. Y si ya está bien no olvides puntuar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas