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

Pepe Martínez

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *