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

Deja una respuesta

Los campos requeridos estan marcados con *.