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
Hola:
La línea
StrDocName = Left(StrDocName, Len(StrDocName) - Len(StrDocExt)) & "_"
tiene mal puesto el paréntesis de cierre de Left
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.
Excelente!! llevo horas buscando algo que me funcionara para lo que necesito. Esta fórmula se adecua a mis necesidades.
Muchas gracias.
da un error de ejecucion en
Selection.Paste
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.
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
Muchas gracias, Jimmi, por seguir y compartir con tus contactos mis canales:
Lo más probable es que tengas un problema de ortografía en el código. Para evitarlo copia y pega. Estos son las causas del error: https://docs.microsoft.com/es-es/office/vba/language/reference/user-interface-help/object-required-error-424
Y, sí, la macro te pregunta: "¿Cuál es el número de páginas por el que quiere dividir?"
Perfecto, super eficiente. Gracias por el aporte.
Hola Gracias por la macro. Solo una pregunta hay algún truco para que guarde el formato del archivo combinado en los archivos individuales?
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.
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
Muchas gracias, Cristhian, por seguir y compartir mis canales:
Vigila los Saltos de párrafo vacíos al final.