25 septiembre, 2023

COMBINAR CORRESPONDENCIA EN EXCEL Y GUARDAR EN PDF

Hola a todos!, espero que todo os vaya bien 🙂

Llevo varias semanas que no publico nuevo material, el motivo no es otro que la falta de tiempo. Lo cierto es que entre la temporada veraniega, la reincorporación al trabajo y temas pendientes, se hace complicado sacar un momento para escribir nuevas entradas.

Estos días sin embargo, tuve tiempo para preparar un post bastante interesante. Como suele ser habitual, el tema surgió a raíz de una consulta de una lector. Me preguntaba acerca de la posibilidad de realizar combinar correspondencia en Excel y poder pasar cada uno de los documentos a PDF de forma individual.

Normalmente, el proceso de combinar correspondencia se inicia desde Microsoft Word y se accede a Excel para buscar la base de datos en la que tenemos la información necesaria para enviar la correspondencia. Prácticamente se pueden realizar todo tipo de envíos masivos y enviar la información a través de correo electrónico. También se pueden imprimir los documentos (es posible que con paciencia se puedan imprimir con algún programa a PDF de uno en uno, especificándolo en el cuadro de diálogo de la impresora).
Para más información sobre combinar correspondencia os dejo el siguiente enlace: COMBINAR CORRESPONDENCIA

Pues bien, en casi la totalidad de los casos podremos solucionar nuestras necesidades con Word. Pero si queremos pasar cada uno de los archivos que queremos enviar a PDF y guardarlos en un directorio, Excel es una buena solución. Para hacerlo, debemos construir nuestra propia aplicación de combinar correspondencia.

Después de este pequeño comentario, ya estamos listos para comenzar. Como siempre, vamos a ver la base de datos que hemos confeccionado para enviarles una comunicación, pestaña «DATOS»:

combinar-correspondencia-en-excel-y-guardar-en-pdf

El siguiente paso ahora es crear la plantilla que vamos a utilizar para incorporar los datos a enviar. La plantilla la vamos a crear directamente en una hoja Excel, lo haremos teniendo en cuenta los formatos que podemos darle al texto en cada línea de la hoja, y además crearemos una serie de marcadores que luego vamos a utilizar para trasladar los datos de cada persona. Esta es la plantilla:

combinar-correspondencia-en-excel-y-guardar-en-pdf1

Como podéis observar, aquellos campos que hacen referencia a los datos que iremos incorporando en cada carta los marcaremos entre corchetes «<>», luego en la macro haremos referencia a ellos para reemplazarlos.

Es importante que vayáis configurando en cada línea lo datos de la forma en la que saldrán finalmente, aunque esto lo podéis hacer realizando varias pruebas para depurar el diseño.

La plantilla «GENERAR» no contiene datos, será la hoja en la que se vuelque una copia de «PLANTILLA» y en la que iremos colocando cada registro de la hoja «DATOS». Lo que sí es importante es que en la hoja «GENERAR», las líneas y las columnas tengan en mismo ancho que la hoja «PLANTILLA», o por lo menos tener en cuenta que el PDF final tendrá el mismo formato que la hoja «GENERAR»:

combinar-correspondencia-en-excel-y-guardar-en-pdf2

Ahora que ya tenemos la carta incorporada en nuestro archivo y las hojas creadas, ya podemos ir a la programación, debemos incluir esta macro:

Sub COMBINAR_CORRESPONDENCIA()
Dim i As Double
Dim ruta As String
Application.ScreenUpdating = False
'Activamos nuestro libro
ThisWorkbook.Activate
Sheets(2).Name = "GENERAR"
'seleccionamos hoja "GENERAR"
Sheets("GENERAR").Select
'Contamos el número de casos
Fin = Application.CountA(Sheets("DATOS").Range("A:A"))
'Elegimos la carpeta donde queremos guardar los archivos
On Error Resume Next
With CreateObject("shell.application")
ruta = .browseforfolder(0, Titulo, 0).Items.Item.Path
End With: On Error GoTo 0
'Si no elegimos la carpeta de destino, la macro se para
If ruta = Empty Then
MsgBox "DEBES SELECCIONAR UNA CARPETA DE DESTINO, PULSA DE NUEVO EL BOTÓN GENERAR", vbExclamation
Exit Sub
End If
'Iniciamos un for
For i = 2 To Fin
'Creamos variables para cada uno de los datos a incorporar en la hoja "GENERAR"
Nombre = Sheets("DATOS").Cells(i, 1)
Apellidos = Sheets("DATOS").Cells(i, 2)
Lugar = Sheets("DATOS").Cells(i, 3)
Fecha = Format(Sheets("DATOS").Cells(i, 4), "[$-C0A]d ""de"" mmmm ""de"" yyyy;@")
ExcelSignum = Sheets("DATOS").Cells(i, 5)
Email = Sheets("DATOS").Cells(i, 6)
Firma = Sheets("DATOS").Cells(i, 7)
'Llamamos a la macro Actualiza
Call ACTUALIZA
'Damos nombre a la hoja activa, que es GENERAR
ActiveSheet.Name = Sheets("DATOS").Cells(i, 1) & " " & Sheets("DATOS").Cells(i, 2)
With ActiveSheet
'Reemplazamos los datos en los marcadores que hemos creado en Plantilla
Cells.Replace What:="<NOMBRE>", Replacement:=Nombre, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<APELLIDO>", Replacement:=Apellidos, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<LUGAR>", Replacement:=Lugar, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FECHA>", Replacement:=Fecha, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<EXCEL SIGNUM>", Replacement:=ExcelSignum, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<EMAIL>", Replacement:=Email, LookAt:=xlPart, SearchOrder:=xlByRows
Cells.Replace What:="<FIRMA>", Replacement:=Firma, LookAt:=xlPart, SearchOrder:=xlByRows
'Si queréis dar formato de hipervínculo a las celdas A6 y A10
'Solo tenéis que descomentar la parte indicada entre puntos:
'-----------------------------------------------------------
.Range("A6,A10").Select
With Selection
.Font.Color = RGB(0, 0, 255)
.Font.Underline = xlUnderlineStyleSingle
End With
'-----------------------------------------------------------
End With
'Publicamos en PDF, sin propiedades en el documento y sin abrir cada vez que se genere el PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta & "\" & ActiveSheet.Name, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
'Volvemos a renombrar la hoja2 como "GENERAR"
Sheets(2).Name = "GENERAR"
Next
End Sub

Con esta macro debemos adjuntar esta otra, a la que hacemos referencia en la macro principal:

Sub ACTUALIZA()
Dim Shape As Excel.Shape
'Limpiamos contenidos en hoja "GENERAR"
Sheets("GENERAR").Select
Columns("A:A").ClearContents
'Eliminamos imagenes en la hoja Generar
For Each Shape In Sheets("GENERAR").Shapes
Shape.Delete
Next
'Copiamos la plantilla base desde la hoja "PLANTILLA" a "GENERAR"
'Seleccionamos el rango de FILAS hasta donde tenemos texto o un rango superior
Sheets("PLANTILLA").Select
Rows("1:50").Select
Selection.Copy
Sheets("GENERAR").Select
Rows("1:50").Select
ActiveSheet.Paste
End Sub

Cuando la macro se ejecute, directamente nos va a preguntar por una ubicación (directorio) en la que queremos guardar cada uno de los PDF generados. Si no elegimos, saldremos la macro y se parará el proceso. Si la elegimos, la macro pasará los datos a la hoja «GENERAR» mediante el comando reemplazar y sustituirá cada uno de registros marcados a través de un bucle for-next.

La otra macro, lo que hace es limpiar de todo contenido la hoja «GENERAR» incluso objetos, como firmas escaneadas, imágenes, logos, etc y traslada el texto de la hoja «PLANTILLA».

Finalmente, guardamos la hoja «GENERAR» denominando a cada PDF con el nombre de las personas, el resultado es este:

combinar-correspondencia-en-excel-y-guardar-en-pdf3

y la comunicación esta:

combinar-correspondencia-en-excel-y-guardar-en-pdf4

De esta forma tendremos todos los archivos en PDF y guardados en el mismo directorio.

En la macro, os he dejado parte del código comentado, ese código sirve para dar formato a los hipervínculos que se mostrarán en el PDF si queremos que se destaquen en azul y subrayados. Es solo una medida puramente estética, el hipervínculo funciona perfectamente.

Y esto es todo, espero que os sea de utilidad.  🙂

Importante: la macro ha sido probada en Excel 2010, 2013 y 2016. En 2007 debería funcionar correctamente, dado que permite pasar documentos a PDF. En versiones anteriores no funcionará.

Descarga el archivo de ejemplo pulsando en: COMBINAR CORRESPONDENCIA EN EXCEL Y GUARDAR PDF

 

Comparte este post

184 comentarios en «COMBINAR CORRESPONDENCIA EN EXCEL Y GUARDAR EN PDF»

  1. Hola que tal, está bastante buena la aplicación y funciona perfecto, sin embargo me queda la duda en qué momento se ejecuta la macro HIPERVINCULOS

    1. Hola Christ,

      La macro HIPERVINCULO no se ejecuta con la macro, estaba en un módulo a parte. Sin embargo, he repasado el post y he cambiado la macro por otra y la he integrado en la macro principal.

      .Range("A6,A10").Select
      With Selection
      .Font.Color = RGB(0, 0, 255)
      .Font.Underline = xlUnderlineStyleSingle
      End With

      Simplemente nos limitamos a dar formato a los hipervínculos (color azul y subrayado). Está comentado, si quieres que te funciona solo tienes que descomentarlo quitando las comillas simples.

      Un saludo!!

  2. Buenos días,

    Esta macro me viene genial, me resuelve casi todo lo que necesito, muchas gracias!!
    Solo hay una cosa que no me resuelve, me gustaría poder mandar los diferentes archivo guardado por Email a sus diferentes destinatarios (el Email de los destinatarios estarían guardado en la hoja DATOS,(Columna H por ejemplo)

    Esto se puede hacer?

    Gracias de nuevo

    1. Hola Adrien,

      En efecto, se puede hacer. Para ello es necesario, que declares estas tres variables en el código

      Dim olApp As Object
      Dim objMail As Object
      Dim Archivo As String

      y pegas esto después de haber guardado el pdf en la macro, es decir
      ……… OpenAfterPublish:=False

      y ahora pegas esto:
      Archivo = ruta & "\" & ActiveSheet.Name
      Set olApp = CreateObject("Outlook.Application")
      Set objMail = olApp.CreateItem(0)
      With objMail
      .Subject = "hola"
      .To = Sheets("DATOS").Cells(i, 8).Value
      .Attachments.Add Archivo & ".pdf"
      .send
      End With
      Set objMail = Nothing
      Set olApp = Nothing

      Envía el pdf a la dirección de correo que pongas en la columna H

      Saludos.

  3. Hola, muchas gracias por esta macro, es casi lo que necesitaba, solo una cuestión, cuando realizo un filtro sobre los datos crea pdfs de todos los registros y no sólo de lo filtrado, hay alguna manera de que únicamente combinara y creará pdf de lo filtrado.
    Muchas gracias.

    Raquel.

    1. Hola Raquel,

      Prueba lo siguiente, has de modificar la macro:

      Justo después del bucle: For i = 2 To Fin
      Pones esto: If Worksheets("DATOS").Rows(i).Hidden = False Then

      Y cierras el condicional justo después de: Sheets(2).Name = «GENERAR»
      Casi al final de la macro, poniendo: end if

      Simplemente le decimos a Excel que cuando una fila esté visible, genere combinar correspondencia, y si está oculta simplemente no hará nada.

      Saludos.

  4. Hola esta macro esta excelente, me funciona de maravilla, pero tengo un inconveniente, no me esta creando todas las cartas de los registros que tengo; tengo 10 y solo me crea 8, yo tengo el nombre de la persona en una sola celda y asi mismo se guarda pero nose cual sera la parte que falta para que me siga generando los otros

    1. Hola Tatiana:

      Tendría que ver la hoja con los datos que tienes. Aunque deberías verificar que no tienes filas en blanco y que los datos a combinar comienzan justo después del encabezado, en la fila 2. De lo contrario tendrías que modificar la macro según la distribución de los datos que tengas.

      Sin ver el documento, diría que tienes dos o más encabezados o filas en blanco. Puedes enviarme un ejemplo de como tienes la estructura de los datos, la hoja DATOS, y echo un vistazo.

      Saludos.

  5. Holaaa muchas gracias ya pude arreglar el problema, ahora quiero colocar el link de las cartas creadas en una celda para poderlas adjuntar y enviar al correo de cada persona; lo que no he podido hacer es esa parte pues las cartas están guardadas con el nombre completo y así mismo quiero que se ubiquen en su respectivo lugar. Podrías ayudarme

    1. Hola Tatiana:

      Me alegro que hayas podido solucionar el problema. Sobre la nueva solicitud, fíjate en el comentario que hace Adrién (un poco más arriba) y la solución que le indico. Creo que es lo que necesitas.

      Saludos.

  6. Hola ya pude hacer lo de las cartas, quedo super bien el trabajo de acuerdo a lo que necesitaba, muchas gracias tu macro me ayudo mucho y el codigo lo explicas todo a las mil maravillas… Mil gracias

  7. Holaa De nuevo yo por aqui, ahora traigo un nuevo interrogante, tengo dos tipos de carta pero como hacer que se genere la carta respectiva dependiendo de una condicion o un dato que se encuentra en la hoja DATOS.
    Agradezco tu colaboración otra vez 😉

  8. Buenos días:
    Me ha servido muchísimo esta macro! Pero tengo un problema, intento importar un campo llamado «Temario», es un campo con bastante texto, y me da fallo.
    No obstante si meto solo 3 o 4 lineas como temario todo correcto. Alguien sabe que sucede? Muchas gracias por la ayuda!

    1. Hola Álvaro:

      Podrías enviar a excelsignum@yahoo.es ese ejemplo en concreto que te está ocasionando el error?, de esa forma se podría averiguar cual es el problema.

      Ten en cuenta que en la macro y en el ejemplo los campos nombre y apellidos se usan también para nombrar la pestaña de la hoja y esta tiene una serie de limitaciones:

      – El nombre de la hoja no puede superar los 31 caracteres.
      – No ha de contener los siguientes caracteres: \ / ¿ ? * [ ]
      – No puede quedar el nombre en blanco.

      Si esto sucede mostrará un error en la siguiente línea:

      ActiveSheet.Name = Sheets("DATOS").Cells(i, 1) & " " & Sheets("DATOS").Cells(i, 2)

      La solución es utilizar o introducir un campo nuevo, como la firma etc … que no está nombrando las hojas.

      Saludos

      1. Hola Segu, Me pasa lo mismo que a Alvaro. Mi celda tiene bastante texto (es un campo de comentarios) pero a pesar de que la acorto para ver si logro generar el PDF sigue fallando. y creo que es por tema de Tildes(acentos en palabras). Sabes como puedo corregirlo?

  9. Hola, me parece maravillosa esta marco, no soy experto en excel y no se como solucionar el siguiente problema. Cuando doy clic en el botón de genera, sale un error «DEBE SELECCIONAR PRIMERO EL DESTINO…», pero no se como hacerlo. De antemano muchas gracias por su ayuda. Saludos

  10. Hola excelente ejemplo, muchas gracias… pero tengo un problema….he agregado mas columnas a DATOS y una es con bastante texto … y cuando hago el proceso de reemplazar me sale un error que dice: «Se ha producido el error ’13’ en tiempo de ejecución: No coinciden los tipos. » Ese campo tiene un texto muy amplio…es como una especie de RESUMEN… me podrías ayudar. Gracias

    1. Hola Gary:

      El error que te aparece es porque la cadena de texto que estás reemplazando supera los 255 caracteres, debe ser menor o igual a 255 caracteres. Son los límites de la función reemplazar.

      Otra opción es que esa celda la trates como una variable y la iguales en la hoja del borrador, es decir no usar la función reemplazar para esa información, así no tendrías esa restricción.

      Espero haberte ayudado.

      Saludos.

  11. hola, genial post, me sirve bastante, sin embargo quisiera un poco de ayuda extra por fa, estoy tratando de llenar unos reportes de ensayos de laboratorio, ya que tengo bastantes ensayos, para ingresar valores numéricos me va genial tu ejemplo, sin embargo me gustaría agregar a cada reporte un par de fotos y una grafica de excel ¿es esto posible? de antemano muchas gracias

    1. Hola Javer:

      Pues encontrar información en estos dos post:

      https://excelsignum.com/2016/04/05/insertar-fotografia-en-control-de-imagen/
      https://excelsignum.com/2015/10/17/generar-grafico-dinamico-con-vba/
      https://excelsignum.com/2015/05/30/automatizar-minigraficos-en-nuestra-hoja-excel/

      Pero supone incluir una gran cantidad de programación. Intenta realizar los cambios basandote en estos artículos, si tienes alguna duda, me puedes consultar aquí: excelsignum@yahoo.es

      Saludos.

  12. Hola.. me ha funcionado excelente.

    Quisiera pedirte ayuda, para ver si además de generar los PDF individuales, puedo generar uno que consolide todos.

    Muchas gracias!!

    1. Hola Karina:

      Este post está programado específicamente como una alternativa eficaz a una carencia de COMBINAR CORRESPONDENCIA en word, que es precisamente el obtener de forma individual y en PDF la información.

      Si lo que necesitas es consolidar todos, deberías usar combinar correspondencia. Para realizar ese trabajo en VBA, se debería modificar la macro de forma que vaya pegando todos los mensajes uno debajo de otro y definir los saltos de página para que cada uno coincida con una página. Tendría que programarlo, en cuanto tenga un momento, lo hago.

      De todas formas, ten en cuenta que combinar correspondencia en word siempre será la mejor solución, dado es una función desarrollada para hacer ese trabajo específico.

      Saludos.

      1. Muchas gracias por la pronta respuesta…

        Con combinar correspondencia me funcionaría bien, pero necesariamente debo gatillarlo desde excel, por lo que si me puedes ayudar con eso, lo agradecería enormemente…

        Saludos

          1. Buena tarde, muchas gracias por tu aporte, se que debe llevar tiempo y esfuerzo el programar y contestar todas nuestras dudas, agradezco lo que haces por los demás.
            Podrías de favor apoyarme con la misma duda, necesito compilar todos en un solo PDF, muchas gracias por todo tu apoyo

  13. buenas tardes. Yo tengo unos formularios hechos en pdf los cuales quiero que se llenen automáticamente con los datos importados de una base de datos de excel. eso es posible? como se haria? Muchas gracias desde ya!!!

    1. Hola Danilo:

      No sé a que te refieres con «unos formularios hechos en pdf». ¿formularios realizados con Acrobat?, ¿formularios de Excel?. Tendrías que ser más específico en la consulta.

      Saludos.

      1. Son formularios que los hice con el acrobat. Y tienen espacios para ser llenados. Yo quiero que se llenen automáticamente desde una base de datos. Como una correspondencia de word y excel pero mi archivo esta en pdf

  14. Buen día, felicidades por la macro, esta excelente! y muy útil, sin embargo hay algo que quisiera cambiar y seria que al mandarlo por correo se pudiera incluir una firma que contiene texto e imágenes, como se haria?

  15. Hola, me ha gustado mucho la macro que usted ha desarrollado, sin embargo tengo la misma peticion de Karina del 6 de diciembre, me podria dar una copia de la modificacion que realizo para ella?? Muchas gracias.

  16. Excelente macro me ha servido muchísimo para poder combinar cartas de certificados, pero quisiera que me ayudaras con algo. Es posible que al momento de reemplazar los valores de la combinación con reemplace con algún formato especifico, por ejemplo que cuando reemplace e nombre o el apellido los coloque en negrita, o les cambie el color del texto. Muchas gracias por tu ayuda

    1. Hola: Stivison:

      Puedes probar usando esto: para el nombre,

      Cells.Replace What:="", Replacement:=nombre, LookAt:=xlPart, SearchOrder:=xlByRows

      Pon esto debajo, coloreará todos los caracteres desde la posición 12 hasta la cien de color rojo

      .Cells(4, 1).Characters(Start:=12, Length:=100).Font.Color = vbRed

      Y así con el resto controlando donde empieza el texto a colorear

      Saludos

  17. Hola excelente macro porfavor necesito ayuda como se puede hacer para que la hoja «DATOS» se pueda hacer con cualquier hoja que este activa

    1. Hola Eduardo:

      La macro está diseñada para trabajar con una hoja específica, (datos) o cualquier otra, pero con una hoja activa, sería necesario reprogramar de nuevo todo el código. No basta con reemplazar la hoja Datos por activesheet.

      En cuanto tenga un momento, estudiaré cómo hacerlo. Saludos.

  18. HOLA QUE GRAN APORTE, Pero tengo una necesidad, utilice una Plantilla que tiene colores en el fondo y en la letra, pero al generar el PDF queda en blanco y negro. ¿Como podria solucionarlo?

    1. Hola Pablo,

      La macro está programada para trabajar con los datos, para el tema de los colores y formatos, lee en algunos de los comentarios donde explico como aplicar colores.

      Saludos.

  19. Hola, una pregunta, yo busco hacer algo similar, tengo la base de excel con la información de personal, sin embargo esa información la tengo que transcribir a un pdf ya elaborado, mi pregunta es puedo generar la correspondencia de esta manera?

    1. Hola Mario:

      Desconozco el procedimiento para pasar datos de un Excel a un PDF para incluir datos directamente. Saludos. Tendrías que investigar en los foros de acrobat para encontrar documentación. Saludos.

  20. Hola Segu. muchas gracias por esta información que nos sirve de gran ayuda. Mi duda es si esto mismo se podría usar para generar pdfs a partir de un pdf único donde cada pagina tiene que ser un pdf individual, combinandolo con un archivo excel a modo de indice, con una columna numero, que seria el nº de pagina y otra columna nombre, que es el nombre con el que quiero guardar cada pdf individual. Espero haberme explicado 🙂
    Muchas gracias y un saludo

  21. Podrias adaptarlo para que se genere una nueva carta sólo cuando cambie el valor de una celda, y mientras tanto escriba los datos en una tabla diseñada en la plantilla.
    Gracias

      1. En primer lugar comentarte que me ha sido muy útil tu macro porque me permite generar pdf individuales y controlar el nombre de los ficheros. Esta cada vez es más importante con la implantación de la firma digital. Yo lo he adaptado a mis intereses y va perfecto. Lo que te planteaba es teniendo en datos más de una línea por destinatario, imprimir todas las líneas en él mismo pdf, creandose un nuevo pdf solo al cambiar el destinatario.
        Este situación no tiene fácil solución en la fusión de word.
        Espero haberme explicado y enhorabuena por tu blog

        1. Hola vblanquet:

          Lo que planteas es complejo de resolver con la estructura de programación que tiene actualmente, dado que está pensado que cada línea es un destinatario. La única forma de realizar es incluir los nuevos campos en columnas en lugar de filas. Supongo que tienes datos en la base duplicados y por eso planteas esa pregunta. Pero la única solución viable es que pases esa información a nuevas columnas, dado que realmente se trata de la misma persona.

          Saludos.

          1. Exactamente no son duplicados. Imagina que voy registrando las consultas que cada cliente hace durante un periodo, al finalizar el periodo a cada cliente le remito el detalle de las consultas hechas en el periodo. Para ello tendría una tabla de datos ordenada por cliente y una fila por cada consulta realizada. La idea es generar esta carta resumen con una macro similar a esta. Voy a intentar adaptarla incorporando un ciclo dentro del for que se repita mientras el cliente no cambie.
            Espero haberme explicado bien esta vez.

  22. Es increible lo bien que manejas el tema, la creación de soluciones a la medida me deja asombrado. Muchas gracias por la información.

  23. Hola Segu,

    Antes de nada felicitarte por tu blog y la valiosa información que nos ofreces.. Gracias!!!!

    Al hilo de la macro en la que se genera un pdf por cada fila y es enviada por mail a cada destinatario, me gustaría personalizar en el correo electrónico que se envía, en «Asunto» y en el campo «Body» personalizándolo con los campos obtenidos en la hoja de «Datos» e incluyendo en el mail una firma de correo..

    Para una personalización más cómoda del correo electrónico, quizás podríamos añadir una hoja más en el libro de excel que se llame por ejemplo «Plantilla Mail» y así generar igualmente la personalización del mail como la del pdf desde VBA?

    Ya nos dices..Muchas gracias!!!!

  24. Hola, muchas gracias me ha servido bastante.

    tengo una duda, si mi base de datos no inicia en la fila 1, puedo en algún punto cambiar este rango en tu macro.

    Muchas gracias por tu ayuda

    1. Hola William.

      Debes indicarlo en el loop For i = 2 To Fin

      Donde el 2 es la fila en la que empiezan los datos. Indica ahi la fila en la que tus datos comienzan. Saludos.

  25. hola, que bien y muy interesante, quisiera saber si puede agreagarse al documento por ejemplo una tabla de datos, es decir que pueda agregar mas de una linea de informacion y generar mis pdf. muchas gracias.
    sls

    1. Hola Osiel:

      Actualmente está programado para leer en líneas, es decir si deseas incluir más información sobre un ID es necesarios que acomodes los datos en horizontal, no en una tabla. Saludos.

  26. Cordial salud

    excelente programación, pero cada que genero regraba nuevamente los archivos y si tengo una base de datos grandes el proceso se demora un poco y solo necesito imprimir la ultima ingresada.

    Seria posible elegir que carta generar a través de algún dato ejemplo nombre u otro dato que se le agrege a la base de datos como un consecutivo

    De antemano muchas gracias por aportes tan espectaculares

    1. Hola Luis:

      Eso lo puedes hacer incluyendo un if condicional después del for. Por ejemplo,
      For i = 2 To Fin
      If Sheets(«DATOS»).Cells(i, 8) = «x» Then
      end if
      next
      end sub

      Aquí, generará la carta de aquella persona que tenga una «x» marcada en la columna 8 de la hoja datos.

      Saludos.

      1. Muchas gracias por su respuesta y disposición, grandes son los aportes que ofreces y sin ningún interés, seguiré pendiente de tu canal aprovechando sus publicaciones y conocimientos. de nuevo muchas gracias

  27. Hola Buenos dias,

    La macro me ha funcionado perfecto, pero tengo uninconveniente por que he agregado varios datos y ahora me genera el error

    «se ha producido el erro 9 en tiempo de ejecucion

    subindice fuera de intervalo»

    me podrias ayudar a entender por que surge este error, excelente post!!

    1. Hola Andrés cuando ejecutes la macro y salta el error, debes analizar en el código qué parte no está funcionando. Normalmente ese error surge porque no encuentra el objeto.

      Tendría que ver los datos para confirmarlo.

      Saludos.

  28. Hola Segu!
    He visto tu macro y es casi lo que necesito, sin embargo, quiero ver si me puedes ayudar pues en lugar de generar los documentos PDF, yo necesito que se generen hojas de excel para poder conservarlas como archivo.
    Será posible algún movimiento como ese?
    Espero que sí.

    Gracias y menuda Macro!

    1. Hola Genoveva;

      Debes sustituir en la macro en la parte donde se encuentra esto:

      End With
      ‘Publicamos en PDF, sin propiedades en el documento y sin abrir cada vez que se genere el PDF
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      ruta & «\» & ActiveSheet.Name, Quality:=xlQualityStandard, _
      IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
      ‘Volvemos a renombrar la hoja2 como «GENERAR»
      Sheets(2).Name = «GENERAR»

      Por esto otro:

      End With
      'Volvemos a renombrar la hoja2 como "GENERAR"
      ThisWorkbook.Sheets(2).Copy
      ActiveWorkbook.SaveAs ruta & "\" & ActiveSheet.Name, FileFormat:=51
      ActiveWorkbook.Close
      ThisWorkbook.Sheets(2).Name = "GENERAR"
      Next

  29. Que tal, segu, como estas? Tu articulo esta excelente, solo quisiera ver si me puedes ayudar con una duda que tengo, necesito solo crear el pdf de un solo registro en este caso de una sola personal, entonces, existe la manera de filtrar o preguntar solo que persona queremos generar el archivo pdf y que solo se genere ese pdf? Buen dia. Saludos.

  30. Hola Segu! Muchas gracias por el aporte, me ha funcionado bastante bien. Sin embargo, al reemplazar una celda en específico (0003245 por ejemplo), al exportar a la sheet «GENERAR», retira el formato incluyendo los ceros al principio. Intenté modificar en la segunda macro [Actualiza], para conservar el formato, pero no funciona. Alguna sugerencia?
    Gracias de antemano.

    1. Hola Jonathan:

      No comprendo muy bien el problema, ¿es por que retira los ceros?, si es así aplica en la hoja Generar el formato texto en todo el rango de la carta. Te pasará todos los ceros a la izquierda dado que tendrá formato texto.

      Saludos

  31. Buenas tardes, Segu, muchas gracias por el aporte, tus comentarios y aportaciones son muy valiosos; me gustaría que me ayudaras ya que no necesito que se conviertan en pdf, sino en lugar de eso genere una nueva hoja con el nombre correspondiente de cada quien.

    Espero puedes ayudarme.

    saludos

    1. Hola Jiar:

      Creo que lo preguntas es lo mismo que ha solicitado Genoveva en un comentario un poco más arriba. Prueba la solución que le he dado.

      En lugar de PDF genera hojas un archivo Excel con el nombre.

      Saludos.

  32. Segu, Antes de todo felicitaciones pro la verdad funciona perfectamente.
    Te queria consultar si es posible en el cuerpo del Email escribir algo?
    *Necesito poder escribir una frace en el cuerpo del email y si también es posible poder poner el asunto del mismo correo una etiqueta
    Ejemplo .Subject

    Muchas Gracias

    1. Hola Franco:

      Tendrías que incluir una nueva columna denominada Subject y en cada línea el contenido del mensaje. Obviamente modificar en la programación e incluir los nuevos datos.

      1. Segu mil disculpas pero no entendí mucho. No logro seguirte.
        Aparte de poder escribir en el cuerpo del correo. me gustaría
        que en el asunto salga el nombre. Cosa que probé hacerlo pero no salia nada.

  33. El siguiente código crea las cartas con respecto a una base de datos… no importa el numero de columnas… si algo me escriben y les envio ejemplo…

    Sub cartas()
    patharch = ThisWorkbook.Path & «\Carta Incremento.dotx»

    For i = 2 To Range(«A» & Rows.Count).End(xlUp).Row
    Set objWord = CreateObject(«Word.Application»)
    objWord.Visible = True
    objWord.Documents.Add Template:=patharch, NewTemplate:=False, DocumentType:=0

    For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    textobuscar = Cells(1, j)
    objWord.Selection.Move 6, -1
    objWord.Selection.Find.Execute FindText:=textobuscar

    While objWord.Selection.Find.found = True
    objWord.Selection.Text = Cells(i, j) ‘texto a reemplazar
    objWord.Selection.Move 6, -1
    objWord.Selection.Find.Execute FindText:=textobuscar
    Wend

    Next

    ruta = ThisWorkbook.Path & «D:\Incremento»
    nombd = ruta & Cells(i, «A») & «.docx»
    nombp = ruta & Cells(i, «A») & «.pdf»

    objWord.ActiveDocument.SaveAs
    objWord.Quit (False)

    Next
    MsgBox «Cartas Generadas Correctamente», vbInformation, «CARTAS GENERADAS»

    End Sub

  34. Hola Segu,

    Mil gracias por tu aporte, es sumamente útil para cualquier proceso que requiera envío de correspondencia. Consulta, cómo puedo incorporar algún texto en el cuerpo del correo?

    Abrazo!

    1. Hola Ignacio:

      Este post es para generar PDF individuales (que es una de las funcionalidades que no tiene combinar correspondencia en word), para el tema de enviar correos lo puedes hacer perfectamente desde WORD usando combinar correspondencia y usando la vista html.

      https://support.office.com/es-es/article/combinar-correspondencia-con-una-hoja-de-c%C3%A1lculo-de-excel-858c7d7f-5cc0-4ba1-9a7b-0a948fa3d7d3

      Te dejo otro enlace de interés:
      https://excelsignum.com/2018/01/28/enviar-firma-con-imagen-y-texto-desde-outlook-usando-excel-y-vba/

      Saludos!!

    2. Hola Segu, te cuento me ha ido muy bien con la herramienta, he logrado optimizar mas de un proceso, gracias por compartir el conocimiento! Tengo una duda, en un proceso que estoy llevando me está generando 2 hojas en el pdf, y la segunda en blanco. He probado restringiendo esta parte del código hasta la fila que contiene datos, por ej:

      Sheets(«PLANTILLA»).Select
      Rows(«1:50»).Select
      Selection.Copy
      Sheets(«GENERAR»).Select
      Rows(«1:50»).Select
      ActiveSheet.Paste

      Y donde dice 50 lo he dejado en 37, que es la ultima fila con datos, pero aun así sigue generando una segunda hoja en blanco. Podrías ayudarme?

      Saludos!

          1. Hola Segu, estoy teniendo otro problema. Ejecuté la macros para 35 registros y generó pdfs para todos, pero sólo para los primeros 30 se envió el correo. Esto tiene que ver con alguna configuración de la casilla outlook? o de la macros?

  35. Amigo mío.

    Me has ayudado bastante con tu conocimiento. Sin embargo, me queda una duda. Cómo puedo poner un campo en «negritas» o con «subrayado». Si el campo que reemplaza con un dato, pero éste viene junto a un texto, por ejemplo, «Buen día, Sr(a) «, y quiero poner en «negritas» , cómo puedo hacerle sin que se modifique el resto del texto y sin necesidad de separar en celdas.

    Si puedes ayudarme, te agradeceré eternamente.

    1. No entiendo por qué el post no me dejó escribir bien mi ejemplo.

      No obstante, me gustaría saber, en tu mismo ejemplo que pones, cómo poner en negritas el nombre, sin tener que separarlo en otra celda.

      Espero que sea clara mi duda.

      Saludos cordiales.

  36. Hola:
    Mi caso es el siguiente. Tengo un documento de 1900 páginas que he generado combinando correspondencia. Ahora lo tengo que dividir en tantos documentos como nombres diferentes (76), hay en un campo del documento. Es decir, tengo que generar 76 documentos individuales nombrados con cada uno de los nombres del campo del documento y mandar cada uno de estos documentos a una dirección de correo electrónico con cinco palabras en el asunto del mensaje.

    Me podrías dar alguna pista de cómo hacerlo?

    Muchas gracias

  37. Hola,
    Eres un gran experto, gracias a ti pude solucionar muchos problemas en el trabajo, pero ahora se suman los trabajos y tengo una duda, es posible también incluir ademas de texto imágenes en el generador y que las reemplace desde la base de datos.
    Por otro lado también si es posible que al guardar en PDF ademas de independiente generase uno con todos juntos y ordenados.

    1. Hola Jose:

      Este código es específico para generar archivos independientes. Para poder generar todos a la vez, debes utilizar COMBINAR CORRESPONDENCIA de WORD.

      Por otra parte el tema de las imágenes para cada registro de la base de datos dudo que se puede realizar de forma sencilla (o que se puede realizar), dado que serían multitud de objetos a parametrizar y llevarlos a la hoja que se combina. Es decir, en el supuesto que sea una imagen por registro, sería necesario nombrar el objeto con un número para que se pudiese sincronizar con la fila asociada, identificarlo, seleccionarlo y pegarlo en la hoja nueva (y dimensionarlo).

      Si son más imágenes, la complejidad sería aún mayor. Podrías intentarlo de la forma que te indico si solo trabajas con una imagen asociada a cada registro.

      Saludos.

      1. Muchas gracias Segu,

        Que pena, lo cierto que serian varias fotos, localizadas eso si, en la hoja de «base de datos» con el tamaño ya definido en esta, pero entiendo la complejidad, una foto no es un texto, es una pena deseaba crear un generador de informes que ademas de texto tuviera fotos y así ahorrarme el trabajo de crearlo de uno en uno.
        ¿Es posible hacerlo usando la función hipervínculo?, le doy vueltas al asunto, lo se, pero necesito algo de manera algo desesperada jejeje.
        saludos, de nuevo gracias por tu ayuda.

        1. Hola José:

          Si lo único que necesitas es pegar algunas imágenes a la hoja que se genera el PDF al estilo logo de la empresa, entonces sí es sencillo:

          Lo único que tienes que hacer es eliminar esta parte del código en la macro ACTUALIZA

          ‘Eliminamos imagenes en la hoja Generar
          ‘For Each Shape In Sheets(«GENERAR»).Shapes
          ‘Shape.Delete
          ‘Next

          De esa forma no se borrarán los shapes que hayas incluido en el modelo.

          Saludos

  38. De nuevo muchas gracias Segu,
    Pero no, lo que necesito es agregar 3 fotos por cada fila de datos, las fotos ya se encontrarían en la hoja de datos igual que el resto y con el tamaño que necesito para la hoja principal. Seria mover y reemplazar, por eso preguntaba si seria posible hacerlo de otra forma.
    Saludos,

    1. Buenas,
      Lo conseguí, después de muchas pruebas, logré que se pueda añadir fotos desde otra tabla con el formato de esta, añadiendo una macro de insertar y un numerador de fila, para que cuando aparezca determinado numero añada las fotos de esa fila con un corta y pega.

  39. Hola Segu, super este articulo, pero quisiera que no se exportaran los archivos a PDF, sino a archivos individuales de EXCEL, es posible?

    Muchas Gracias

    1. Hola Segu, ya encontré la respuesta arriba, perdona… pero ahora necesito ampliar el rango de columnas por que de momento en la plantilla solo puedo usar la columna A, y me gustaría poder poner información en mas columnas.

      Muchas gracias!!

  40. Excelente trabajo…. Necesito ayuda, como puedo en un libro de excel buscar un valor en una tabla y con ese valor de referencia concatenar en una celda a la vez todos los resultados encontrados para ese mismo valor

  41. Muchas gracias por este macro, para mí que estoy empezando está genial. En mi caso, he hecho el macro adaptado a mi plantilla, me crea los PDF perfectos y los renombra también bien, pero me genera un error en la matriz Actualiza. En mi caso solo la he referenciado a una columna que es donde tengo los nombres de cada archivo. La línea donde me falla sería ActiveSheet.Name = Sheets(«Datos»).Cells(i,66). Alguna idea? Gracias de antemano

    1. Hola Pablo:

      Asegurate de que Sheets(«GENERAR»).Select, es decir la hoja GENERAR existe. El error seguramente sea por eso.

      Si no está, NOMBRA la pestaña con ese nombre y ejecuta la macro.

      Saludos

  42. Muchas gracias Segu, ya está claro. Otra cosa más, se podría insertar una imagen (sello) en el PDF. En mi caso va a pie de página y estaría bien que se quedará la imagen por detrás de una tabla que va a pie de página. He probado modificando la plantilla y poniendo la foto como fondo pero cuando se generan los PDF no se guardan con la imagen. Gracias de antemano, eres un fenómeno

    1. Hola Pablo, la imagen únicamente la podrás insertar y mostrar como un objeto. La imagen se guarda y se pasa a PDF, pero debes indicar el rango de la copia en la macro, cuando indico desde la fila 1 a la 50:

      Sheets("PLANTILLA").Select
      Rows("1:50").Select
      Selection.Copy
      Sheets("GENERAR").Select
      Rows("1:50").Select
      ActiveSheet.Paste

      seguramente tienes que darle más ancho para que entre la imagen, pero controla que te quede todo en una página.

  43. Hola, me parece genial y es lo que estoy buscando hace mucho tiempo, te felicito. Tengo un problema, cuando hago click en el botón generar me sale un mensaje que dice «DEBES SELECCIONAR UNA CARPETA DE DESTINO, PULSA DE NUEVO EL BOTÓN GENERAR» y ahí se queda. Sabes como puedo seguir. Muchas gracias

    1. Hola Fernando:

      El mensaje surge cuando no has seleccionado ninguna ruta. Por lo que debes verificar y seleccionar una carpeta o directorio en el que quieres guardar los PDF generados. Ese ese el motivo. Saludos.

  44. Estimado Segu
    De verdad muchas gracias por el tiempo que dedicas en compartir tu conocimiento. Esta macro me ayudará a reducir mucho el tiempo de generación de documentos.
    Te quería consultar si me pudieses ayudar con mi caso, donde tengo que generar 5 pdf distintos con 5 planillas distintas pero con la misma fila de datos de la hoja Datos. Si no es mucha molestia, me sería de gran ayuda.
    Saludos!

    1. Quisiera hacer una consulta. Necesito que en la plantilla se oculte una fila en forma condicional, en mi caso, cuando una celda en particular dice No. Para lograrlo escribì lo siguiente

      If Range(«C15») = «No» Then
      Range(«C15»).Rows(16).Hidden = True
      End If

      Sin embargo, no oculta la fila cuando ésta se encuentra en el rango de filas que se copian desde la hoja plantilla. Favor si me pudieses ayudar a ocultar la fila utilizando la macro que enseñas aquí sobre combinación de correspondencia, y en que sector escribirla, porque se poco de macros en realidad.

      Gracias de antemano, Saludos

        1. Gracias por la pronta respuesta. Pero mi consulta no es sobre ocultar filas en la hoja de Datos para que no se generen los pdf, sino ocultar una fila en la planilla, o en la hoja generar, cuando hay un dato en particular en la hoja datos.
          Saludos

  45. Hola Nancy:

    LA macro está programada para generare un PDF tipo en cada ejecución. Te recomiendo que que vayas generando la información grupo por grupo, según tipo de plantilla.

    Saludls.

  46. Hola, Segundos, te cuento que estoy tratando de correr la macro en un excel para Mac y no ha sido posible se esta quedando en el mensaje DEBES SELECCIONAR UNA CARPETA DE DESTINO, PULSA DE NUEVO EL BOTÓN GENERAR, que consideras que deba hacer? no tengo opción de un equipo win y he bajado tu ejemplo del drive que has dejado y tampoco me ha funsionado tu plantilla, volvemos al mismo paso del mensaje. saludos

  47. Buen día. Muchas gracias por este gran aporte me ha sacado de un apuro. Solo tengo una duda más. La plantilla que manejo contiene determinado texto FIJO en Negritas. Y cuando lo exporto a PDF no conserva ese formato. Vi una respuesta que diste pero es solo para texto que voy a reemplazar o texto donde sepa su ubicación en los caracteres y no lo sé ya que es un párrafo que contiene otros campos que estaré completando con la macro. Cómo puedo respetar el formato del texto al exportar?. Gracias.

  48. hola, excelente aporte, un consulta, se puede utilizar la tabla para usar distintos tipos de formatos, esto es, que cada destinatario reciba una carta diferente.

  49. Hola Segu, como estas?
    Te agradezco por tu ayuda y disposición a responder cada uno de los comentarios.
    Tengo un pequeño problemita, adapte la macro a mis necesidades pero al correr una vez la macro, nombra a la hoja «GENERAR» con el nombre de del primer campo. Posterior a esto, la macro «ACTUALIZA» no encuentra a la hoja «GENERAR», ya que esta ya tiene otro nombre.

    Sabes que puede ser?

    1. Hola Cristóbal:

      El problema es que al ejecutar la macro la has parado y has seleccionado otra hoja. Renombre la hoja a GENERAR y deja el proceso, no selecciones otro archivo ni otra hoja.

      Saludos.

  50. Muchas gracias por el aporte. Está excelente la información. Me queda la duda en que parte tengo que pegar esté código para el envío por correo electrónico.
    y pegas esto después de haber guardado el pdf en la macro, es decir
    ……… OpenAfterPublish:=False

    y ahora pegas esto:
    Archivo = ruta & «\» & ActiveSheet.Name
    Set olApp = CreateObject(«Outlook.Application»)
    Set objMail = olApp.CreateItem(0)
    With objMail
    .Subject = «hola»
    .To = Sheets(«DATOS»).Cells(i, 8).Value
    .Attachments.Add Archivo & «.pdf»
    .send
    End With
    Set objMail = Nothing
    Set olApp = Nothing

    Gracias por tu apoyo.

      1. Muchas Gracias por tu apoyo Segu, ya pude incluir el envío por correo. Tengo la misma consulta que hizo Tatiana, que no me generan todos los archivos pdf. Si tengo varios encabezados en mi archivo excel. Mis datos a combinar comienzan en la fila 6. Que cambio tendría que realizar en la macro para que funcione correctamente?. Gracias de antemano por tu espuesta.

  51. Hola. Muchísimas gracias por el ejemplo. ¿Me puedes ayudar con una modificación? Deseo combinar correspondencia pero que me genere un solo documento PDF con todos los formularios. ¿Será posible hacer esto? Gracias de antemano por tu tiempo y buenas ideas.

  52. Muchas gracias por tu respuesta. Sí, es cierto que lo puedo hacer en Word. Y de hecho lo estoy haciendo de esa manera, pero estoy preparando un Excel con botones y macros para automatizar estas tareas y poder distribuir un solo documento sin depender de enlaces a Word. Me interesa hacer esto en Excel para simplificar. Apretar un botón y ya.

    Tengo en una hoja los datos para generar un máximo de 150 tarjetas, cada una con unos 100 campos. Puedo exportar cada ficha con el código que te copio a continuación, pero me genera los 150 documentos PDF, cada uno con su nombre

    Copio y pego el código que estoy usando actualmente:

    ‘ ================================

    Private Sub ExportarS21_Click()

    Dim Ruta As String
    Dim Nombre As String
    Dim Total As Integer
    Dim Cuenta As Integer

    ThisWorkbook.Activate
    Sheets(«Tarjetas»).Select
    Ruta = ThisWorkbook.Path & «\»
    Total = Worksheets(«Tarjetas»).Range(«AD1») ‘ AD1 Es el total de tarjetas a exportar
    Worksheets(«Tarjetas»).Range(«AA1»).Value = 1 ‘ AA1 Es la tarjeta actual
    Cuenta = Worksheets(«Tarjetas»).Range(«AA1»)

    For Cuenta = 1 To Total

    Nombre = Worksheets(«Tarjetas»).Range(«G6») ‘G6 Es el nombre del documento PDF
    ActiveSheet.PageSetup.PrintArea = «$G$4:$AF$46» ‘Rango de la tarjeta a exportar

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & Nombre _
    , Quality:=xlQualityMinimum, IncludeDocProperties:=False, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False

    Worksheets(«Tarjetas»).Range(«AA1»).Value = Cuenta + 1

    Next

    Worksheets(«Tarjetas»).Range(«AA1»).Value = 1

    End Sub

    ‘ ================================

    He visto un vídeo donde se explica cómo exportar varias hojas en un solo PDF (https://www.youtube.com/watch?v=VqpZFpHxWcs). Pero yo quiero exportar el mismo rango 150 veces en un único documento PDF de 150 páginas.

    Lo puedo imaginar… pero no lo puedo crear

    Muchas gracias 😉

  53. Hola, lo primero felicidades por el trabajo y especialmente por tu predisposición a ayudarnos.
    Mi duda es la siguiente: cuando utilizo la opción de enviar por email, lo hace enviando un email con cada pdf generado. Hay alguna posibilidad de que envíe todos los archivos pdf adjuntos en el mismo email? He mirado en todos los comentarios y creo que no está la consulta. Gracias!!

  54. Buenas tardes,

    Ante todo agradecer tu aportación al conocimiento de todos nosotros.

    Hay algo que no consigo hacer. Quiero poner una imagen de un diploma de fondo y que se imprima sobre ella. He probado todas las formas posibles pero la imagen siempre me aparece sobre el texto. ¿como podría hacerlo?

    Muchas gracias.

    Un saludo,

    Alfredo

    1. Hola:

      Aunque esto no es un tema relacionado con este post, te aconsejo realizar una búsqueda por la red con esto en google: «imprimir en pdf imagen de fondo excel».

      Creo que hay una publicación sobre trucos en excel y habla de cómo insertar una marca de agua. Debes insertarla en la segunda pestaña «GENERAR»

      Saludos.

  55. Vaya que tienes paciencia, y agradezco de antemano que aún después de tanto tiempo siga respondiendo comentarios, me costo encontrar justo esta solución, por ello reitero mi agradecimiento. Solo comentario adicional no me he podido encontrar el vba (codigo), que coloque la contraseña, dada una celda o nombre de archivo a cada PDF. Existe? Es posible? o estoy pasando por alto algo.

    1. Lo puedes hacer de muchas formas, por ejemplo así:

      Sustituye por debajo del subrayado por esto:

      »———————————————————–
      End With

      'Publicamos en PDF, sin propiedades en el documento y sin abrir cada vez que se genere el PDF
      ActiveSheet.Select

      ActiveSheet.Copy
      ChDir "C:\Users\USUARIO\Downloads\Nueva carpeta"
      ActiveWorkbook.SaveAs Filename:= _
      "C:\Users\USUARIO\Downloads\Nueva carpeta\" & ActiveSheet.Name & ".xlsx"
      ActiveWindow.Close

      'Volvemos a renombrar la hoja2 como "GENERAR"

      ThisWorkbook.Sheets(2).Name = "GENERAR"

      Next

      Saludos.

  56. se puede hacer este tipo de correspondencia, pero en lugar de publicar en PDF, que se exporte a un libro nuevo de excel por cada resultado?

  57. Primero que todo muchísimas gracias por tu aporte

    Segundo, quisiera saber si es posible que en la línea

    Fin = Application.CountA(Sheets(«DATOS»).Range(«A:A»))

    Me identifique los datos que tienen texto, o los >0 por que son casillas que están con valores «» y el rango me los identifica como valores, motivo por el cual la macro no para si no hasta encontrar espacios en blanco.

    Agradecería inmensamente tu respuesta.

  58. Hola como están? Quisiera que los archivos que se generen sean en el mismo formato excel y no pdf, como debo hacer esto? Gracias

  59. Hola Segu, gracias por el aporte. una consulta, si en la base de datos tengo en diferentes filas un mismo correo electrónico, puedo hacer que se cree 1 solo correo adjuntando los diferentes archivos que pueda tener relacionados en cada fila? esto con el fin de no enviar 20 correos electrónicos a la vez con diferentes adjuntos y enviar 1 consolidando todos los adjuntos.

  60. Estimado buenos días, desde antemano gracias por tu valioso aporte.
    Agradecería mucho puedas enviarme la macro para que genere todo en un solo PDF, ví que te pidieron lo mismo lineas arriba y se lo enviaste por correo.
    Quedo atento, muchas gracias.

  61. Muchas gracias por el aporte, agradezco lo que haces y el tiempo que le dedicas a ello. Podrías, de favor, apoyarme con el código para compilar el resultado en un solo archivo PDF?. muchas gracias

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies