Private Sub CombinarDocumentosWord ()
' Declaración de variables
Dim wordApp As Object ' Word.Application, es otra posibilidad para definir la variable pero no me funcionó de esta manera
Dim wordDoc As Object ' Word.Document, Word.Application es otra posibilidad para definir la variable pero no me funcionó de esta manera
Dim nuevoDoc As Object ' Word.Document, Word.Application es otra posibilidad para definir la variable pero no me funcionó de esta manera
Dim newDocPath As String
Dim newDocRange As Word.Range
Dim rutaArchivo As String
Dim i As Long
'-----------------------------------------------------------------------------------------------------------------------------------------
On Error Resume Next
'-----------------------------------------------------------------------------------------------------------------------------------------
Set wordApp = GetObject(, "Word.Application")
If Not wordApp Is Nothing Then
wordApp.Quit SaveChanges:=0
Set wordApp = Nothing
End If
'-----------------------------------------------------------------------------------------------------------------------------------------
'Open MS Word
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True ' Para mostrar o no la aplicación Word mientras se fusionan los documentos
'-----------------------------------------------------------------------------------------------------------------------------------------
' Recorre los tres documentos con los que hemos hecho las pruebas Doc1.docx, Doc2.docx y Doc3.docx
For i = 1 To 3
rutaArchivo = Application.CurrentProject.Path & "\DOC" & i & ".docx" ' En la carpeta del programa tenemos que tener creados los documentos Doc1.docx, Doc2.docx y Doc3.docx - son las pruebas que he hecho
' Abre el documento actual
Set wordDoc = wordApp.Documents.Open(rutaArchivo)
' Crea un nuevo documento en blanco, si no existía anteriormente
If nuevoDoc Is Nothing Then Set nuevoDoc = wordApp.Documents.Add
newDocPath = Application.CurrentProject.Path & "\Documento_Combinado.docx"
' Copia el contenido del documento actual al nuevo documento
wordDoc.Content.Copy
' Activamos el documento nuevo para pegar el contenido del documento a copiar
nuevoDoc.Activate
' Nos posicionamos en la parte final del nuevo documento para no borrar lo que hubiera anteriormente
Set newDocRange = nuevoDoc.Content
newDocRange.Collapse Direction:=wdCollapseEnd
' Insertamos un salto de sección a página siguiente; en mi caso, quería fusionar los documentos word y que estuvieran cada uno en páginas diferentes; si se omite este paso, se pegan los documentos seguidos uno detrás del otro sin separación alguna; InsertBreak tiene multiples tipos que se pueden indicar en función de lo que interese hacer (salto de página, salto de sección continua, salto de sección a página siguiente... https://learn.microsoft.com/es-es/office/vba/api/word.wdbreaktype
Selection.InsertBreak Type:=wdSectionBreakNextPage
' Pegamos el contenido copiado en el documento nuevo
newDocRange.Paste
' Cierra el documento actual sin guardar cambios
wordDoc.Close SaveChanges:=False
Next
'-----------------------------------------------------------------------------------------------------------------------------------------
' Guarda y cierra el nuevo documento
nuevoDoc.SaveAs2 newDocPath
nuevoDoc.Close SaveChanges:=True
' Cierra la aplicación Word
wordApp.Quit SaveChanges:=0 'Para el Metodo 2
' Limpia los objetos
Set nuevoDoc = Nothing
Set wordDoc = Nothing
Set wordApp = Nothing
'-----------------------------------------------------------------------------------------------------------------------------------------
MsgBox "DOCUMENTOS FUSIONADOS con éxito", vbInformation, "App Message: Fusionado de documentos Word"
'-----------------------------------------------------------------------------------------------------------------------------------------
End Sub