Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

Generar un archivo de Word desde VBA Excel

| 7 comentarios

Si bien los cálculos y tablas se realizan en Excel, algunos informes o resúmenes deben ser presentados en Word, y si se trata de cientos o miles de clientes o ítems, de nada serviría haber optimizado el tiempo durante los cálculos utilizando una macro si se debe ingresar los datos del excel en el word de manera manual. El siguiente código permite leer una tabla ubicada en este caso en la hoja 1, con una relación de todos los cursos de la currícula de la PUCP. También se incluyen la fecha, hora y nota promedio de los exámenes parciales, y generar un archivo de word individual por cada curso, indicando la nota promedio del mismo, algunos datos propios del día del examen y finalmente indica la fecha en que se generó el reporte.

Al inicio se declaró el option explicit, en vista que se programara utilizando word y excel, esta opcion nos obliga a declarar todas las variables, asi que es util al momento de depurar la macro.

Ademas se seleccionan las siguientes referencias del menú Herramientas: Microsoft Scripting RunTime y Microsof Word Object Library, ya que se citaran archivos externos. Luego se definen las siguientes variables : wordapp que se refiere al archivo creado para cada curso donde se grabara la información y fs que como filesystem object permitirá guardar el archivo de word generado en una determinada dirección.

referencias 300x182 Generar un archivo de Word desde VBA Excel

(Para una mayor visualización de la imagen, hacer click en la misma)

Option Explicit

Private Sub CommandButton1_Click()
Dim wordapp As Word.Application
Dim fs As FileSystemObject
Dim documento As Document, objselection As Selection
Dim camino As String
Dim fila, i As Integer
Const minimo As Integer = 13
Set wordapp = New Word.Application
Set fs = New FileSystemObject

Range("A2").Select
fila = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To fila
Dim nota As Integer
Dim curso, fecha, dia, aula As String

nota = ThisWorkbook.Worksheets(1).Cells(i, 8).Value
If nota <= minimo Then
Else
curso = ThisWorkbook.Worksheets(1).Cells(i, 1).Value
fecha = ThisWorkbook.Worksheets(1).Cells(i, 3).Value
dia = ThisWorkbook.Worksheets(1).Cells(i, 4).Value
aula = ThisWorkbook.Worksheets(1).Cells(i, 5).Value
Set documento = wordapp.Documents.Add
Set objselection = wordapp.Selection

objselection.Font.Bold = True
objselection.TypeText "Comunicado Promedio De Curso"

Call espacios(objselection, 1)
objselection.TypeText "COMUNICADO DE FACULTAD"
objselection.Font.Bold = False
Call espacios(objselection, 1)
objselection.TypeText "El promedio del examen del curso de " & curso & " realizado el dia " & dia & " " & fecha & " en el aula " & aula
objselection.Font.Bold = True
objselection.TypeText " fue de " & nota
Call espacios(objselection, 10)
objselection.TypeText "Lima a fecha " & Date & "."

camino = ThisWorkbook.Path & "\" & curso
If fs.FolderExists(camino) = False Then
fs.CreateFolder (camino)
End If

documento.SaveAs Filename:=camino & "\" & curso & ".doc", _
FileFormat:=wdFormatDocument
documento.Close savechanges:=True
End If
Next i
wordapp.Application.Quit
Set fs = Nothing
Set objselection = Nothing
Set documento = Nothing
Set wordapp = Nothing

End Sub

Public Sub espacios(seleccion As Selection, lineas As Integer)
Dim i As Integer
For i = 1 To lineas
seleccion.TypeParagraph
Next
End Sub

El modulo de espacios sirve para generar lineas entre parrafos. Tambien se consideran formatos como negrita. Solo se elige generar el archivo de word para aquellos cursos cuyo promedio es mayor a 13. Los archivos se crean en la misma carpeta que se encuentra el libro de excel en donde se trabaja

carpetas1 300x182 Generar un archivo de Word desde VBA Excel

(Para una mayor visualización de la imagen, hacer click en la misma)

Finalmente se aprecia en el archivo de word generado

word 300x187 Generar un archivo de Word desde VBA Excel

(Para una mayor visualización de la imagen, hacer click en la misma)

Elaborado por: Jacques Sovero

7 comentarios

  1. Hola, muy buen aporte.
    Podrias adjuntar el archivo con el cual trabaja la Macro? te lo agradeceria mucho, pues asi podria entender mejor el procedimiento que sigue ya que recien me he iniciado en el Mundo del Excel.
    Gracias.

  2. Hola, Muchas gracias por toda esta información colocas acá he estado averiguando y tengo un problema en excel no aparece la opción FileSystemObject, mira esto. Esta parte del programa no me queda muy claro que hace, esto es absolutamente necesario? que implicaciones tendria no programar con esta parte? un saludo y muchas gracias

    • seguramente a estas alturas ya lo averiguaste pero para alguien más que lo lea y tenga el mismo problema, observe que en las referencias aunque se ve seleccionado "Microsoft Word 14.0 Object Library" tambien aparece con palomita
      "Microsoft Scripting Rutime" que es el que contiene el "FileSystemObject"

  3. Buenas,
    Necesito ayuda de un experto.
    Quisiera generar un documento a partir de una seleccion de campos ya sea excel o word.
    Mi idea es, introducir unos campos básicos como nombre del proyecto, logo, personas responsables y a partir de aqui marcar unos campos por ejemplo tema 1, tema 2 y tema 7 y darle a generar.
    el documento final tiene que tener los campos introducidos ( ya lo pondré bonito) mas los temas seleccionados ordenados por numero 1,2 y 3.

    es posible?

    Gracias

  4. Hola, super bueno e aporte tanto que lo adapté para mi trabajo ya que se deben generar muchos certificados, incluso de incorporé unos msgbox y control de tiempo de ejecución.
    Pero tengo una duda con respecto de la versión de Excel en la que fue generado el ejemplo ya que si lo cambio a 2007 a 2010 o 2013, deja de funcionar. Por otra parte, como sabrás hay computadores que tienen restricción de acceso de administración y la macro deja de funcionar. Podrías ayudarme a solucionar lo planteado.

  5. gracias, pero muy extenso, confunde, solo en un par de pasos, excel abre doc edita y guarda. porfavor...

  6. por favor apoyo para copiar rango excel a hoja word hoja horizontal o vertical mediante excel vba

Deja una respuesta

Los campos requeridos estan marcados con *.