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.
(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
(Para una mayor visualización de la imagen, hacer click en la misma)
Finalmente se aprecia en el archivo de word generado
(Para una mayor visualización de la imagen, hacer click en la misma)
Elaborado por: Jacques Sovero
23/08/2012 a las 9:18 am
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.
16/08/2013 a las 4:26 pm
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
03/11/2014 a las 8:59 am
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"
26/02/2015 a las 10:26 am
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
04/10/2015 a las 2:37 pm
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.
06/05/2020 a las 1:52 pm
gracias, pero muy extenso, confunde, solo en un par de pasos, excel abre doc edita y guarda. porfavor...
16/06/2020 a las 6:12 pm
por favor apoyo para copiar rango excel a hoja word hoja horizontal o vertical mediante excel vba