Dividir un documento en varios con VBA

En la entrada anterior contaba cómo dividir un documento de Word extenso en tantos subdocumentos como títulos de primer nivel tuviera. Advertimos que también se podía hacer con VBA y que era la única forma de hacerlo cuando se quiere dividir por otro criterio, diferente a los títulos, como el número de páginas.

He adaptado esta macro de Paul Edstein que hace exactamente esto. Los nuevos documentos los guarda en la misma carpeta que el original con el mismo nombre acabado en un número que empieza en 1 y se va incrementando, de uno en uno.

Sub Dividirdocumentos()
' Divide un documento extenso en varios bloques
Dim iSplit As Long, iCount As Long, iLast As Long
Dim RngSplit As Range, StrDocName As String, StrDocExt As String
With ActiveDocument
iSplit = InputBox("El documento contiene " & .ComputeStatistics(wdStatisticPages) & " páginas." _
& vbCr & "¿Cuál es el número de páginas por el que quiere dividir?", "DividirDocumentos")
StrDocName = .FullName
StrDocExt = "." & Split(StrDocName, ".")(UBound(Split(StrDocName, ".")))
StrDocName = Left(StrDocName, Len(StrDocName) - Len(StrDocExt)) & "_"
For iCount = 0 To Int(.ComputeStatistics(wdStatisticPages) / iSplit)
If .ComputeStatistics(wdStatisticPages) > iSplit Then
iLast = iSplit
Else
iLast = .ComputeStatistics(wdStatisticPages)
End If
Set RngSplit = .GoTo(What:=wdGoToPage, Name:=iLast)
Set RngSplit = RngSplit.GoTo(What:=wdGoToBookmark, Name:="\page")
RngSplit.Start = .Range.Start
RngSplit.Cut
Documents.Add
Selection.Paste
ActiveDocument.SaveAs FileName:=StrDocName & iCount + 1 & StrDocExt, AddToRecentFiles:=False
ActiveWindow.Close
Next iCount
Set RngSplit = Nothing
'.Close Savechanges:=False
End With
End Sub

Espero que te guste, sea útil, comentarios y sugerencias para nuevos temas.

Sigue el blog y compártelo con tus contactos. También puedes seguir el Curso avanzado de Word en mi canal de YouTube

Esta entrada tiene 12 comentarios

  1. Tax

    Hola:
    La línea
    StrDocName = Left(StrDocName, Len(StrDocName) - Len(StrDocExt)) & "_"
    tiene mal puesto el paréntesis de cierre de Left

    1. Pepe Martínez

      Muchas gracias, Tax, por seguir y compartir, con tus contactos, mis canales:
      Creo que no, pero en cuanto pueda lo comprobaré. ¿Lo has comprobado tú? En cualquier caso, muchas gracias por advertirlo.

  2. Andres

    Excelente!! llevo horas buscando algo que me funcionara para lo que necesito. Esta fórmula se adecua a mis necesidades.
    Muchas gracias.

  3. julio

    da un error de ejecucion en
    Selection.Paste

    1. Pepe Martínez

      Muchas gracias, Julio, por seguir y compartir con tus contactos mis canales.
      El error al pegar la selección debe venir de la selección que no está bien: rng.Set
      Revisa el código, o, mejor, copia y pega.

  4. Jimmi

    buenas tardes

    estimado Pepe

    intente correr la macros para separar pero me registra el error 424 igulamente me gustaria saber si se puede separar por por 3 hojas cada PDF

  5. Leo

    Perfecto, super eficiente. Gracias por el aporte.

  6. Rubén

    Hola Gracias por la macro. Solo una pregunta hay algún truco para que guarde el formato del archivo combinado en los archivos individuales?

    1. Pepe Martínez

      Muchas gracias, Rubén, por seguir y compartir con tus contactos mis canales, es muy importante para mí, y por tus amables palabras:
      No termino de entenderte bien, pero el formato que apliques directamente a los campos de combinación, debes mostrarlos con Alt+F9, será el que tenga.

      1. Cristhian Piza

        Hola Pepe creo que Ruben se refiere a que mantenga el formato del word por decir alineación e interlineado, aparte de eso tengo una pregunta al ejecutar la macro ella los divide perfecto pero me genera una hoja adicional no se si en la macro tiene algun comando de un salto de linea o algo asi ya que no lo veo

        1. Pepe Martínez

          Muchas gracias, Cristhian, por seguir y compartir mis canales:
          Vigila los Saltos de párrafo vacíos al final.

Deja una respuesta