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 5 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.

Deja una respuesta Cancelar la respuesta