PROGRAMAR EN VBA MACROS PARA EXCEL: Como Copiar Varias Tablas Vinculadas de Excel a Word de Distintas Hojas

Como Copiar Varias Tablas Vinculadas de Excel a Word de Distintas Hojas






A pedido de un suscriptor de nuestro canal de YouTube se presenta este ejemplo de macro muestra como exportar las tablas de todas las hojas de Excel a Word en forma vinculadas, es decir la macro recorrerá todas las hojas del libro de Excel, determinará en forma automática el rango de cada unas de las tablas contenidas en cada una de las hojas, las copiará y pegara en Word.

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


En el libro que se puede descargar desde el final, el cual es un fichero comprimido que contiene el archivo de Excel con la Macro y un archivo de Word que es usado como plantilla; al abrirlo se puede observar que el libro Excel cuenta con varias hojas, dentro de cada hoja existen diferentes tablas, estas tablas tiene como estructura común que se encuentran que todas empiezan en la columna A y que se encuentran separadas por dos filas vacías, es a los fines que la macro pueda determinar en forma automática el rango de cada una de las tablas las copie y pegue en Word.

La macro se ejecuta con el botón que se encuentra en la hoja1 del libro, al presionarla recorre cada una de las hojas del libro Excel buscando las tablas y copiando y pegando las miasmas a Word, el archivo de Word es una plantilla que simula un informe que contiene un marcador que le dice a la macro donde debe ir pegada cada tabla.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como sumar datos seleccionados en un listbox multiselect


Como insertar filas en hojas de Excel

Libro de Excel con link a todas las macros y tutoriales en YouTube con buscador







La macro recorre todas las hojas del libro Excel en busca de las tablas, para recorrer hojas se utiliza el siguiente código:

For Each hoja In Worksheets

Para que la macro determine en forma automática el rango de las tablas se detecta cual es la última fila hasta llegar a la fila vacía, por eso es necesario por lo menos una fila en blanco entre tabla y tabla, los siguientes códigos determinan cual es la ultima fila y última columna del rango de la tabla y lo copia:

uf = a.Range("A" & pf).End(xlDown).Row
pc = a.Range("A" & pf).Address
pwc = Mid(pc, InStr(pc, "$") + 1, InStr(2, pc, "$") - 2)

Se se observa el archivo de Word que se acompaña con el ejemplo y que se usa como plantilla, tiene marcado donde la macro debe pegar cada una de las tablas, en este ejemplo las tablas se enumeran de la uno en forma consecutiva empezando en la hoja uno, es por ello que si la tabla 5 por ejemplo se requiere en un determinado lugar de Word se debe escribir en la plantilla:

 [CAMPO_TABLA5]

La macro con el siguiente código busca el número de la tabla y la pega en forma vinculada, es decir si se modifica en Excel se modificará en Word, en el lugar indicado con el siguiente código:

ts = "[Campo_Tabla" & n & "]"
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.PasteExcelTable True, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
Wend

Seguidamente se muestra el código completo incluido en todo el formulario que se proporciona con el ejemplo llamado Como Copiar las Tablas de Todas las Hojas de Excel a Word en forma Vinculada, luego del código se encuentre el link para proceder a la descarga del ejemplo el cual recomiendo como así también ver el vídeo para que sea más fácil entenderlo.


Código que se inserta en un módulo de VBA

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



Sub ExportaTablasWordVinc()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim objWord As Word.Application, wdDoc As Word.Document, hoja As Worksheet
On Error Resume Next
Set a = Sheets(ActiveSheet.Name)
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
ruta = ThisWorkbook.Path & "\" & nomarch & ".docx"
Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = wdAlertsNone
objWord.Visible = True
Set wdDoc = objWord.Documents.Open(ruta)
nomfic = nomarch & " " & Format(Date, "dd-mm-yyyy")
rutainf = ThisWorkbook.Path & "\" & nomfic & ".docx"
n = 1
'para cada hoja del libro
For Each hoja In Worksheets
Set a = Sheets(hoja.Name)
pf = 1
uff = a.Range("A" & Rows.Count).End(xlUp).Row


Do
uf = a.Range("A" & pf).End(xlDown).Row
pc = a.Range("A" & pf).Address
pwc = Mid(pc, InStr(pc, "$") + 1, InStr(2, pc, "$") - 2)

uf = uf
uc = a.Range("A" & pf).End(xlToRight).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)

a.Range(pwc & pf & ":" & wc & uf).Copy

ts = "[Campo_Tabla" & n & "]"
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.PasteExcelTable True, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
Wend

pf = uf + 3
n = n + 1
Loop While pf <= uff

wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument

Next 'proxima hoja
'wdDoc.Close
MsgBox ("Las " & n - 2 & " tablas se exportaron con éxito"), vbInformation, "AVISO"
'wdDoc.Quit
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends