Mailings de imágenes en Word y agrupación
Bruno83200_6929 Mensajes publicados 725 Fecha de registro Estado Miembro Última intervención -
Hola,
Tengo dos problemas con el correo masivo de Word en un formato de etiquetas 3*5 que representa un pequeño trombinoscope con información para cada persona:
1) He utilizado un campo INCLUDEPICTURE para insertar una imagen a través de un enlace URL contenido en mi archivo de Excel y cuando tengo etiquetas vacías me indica "Error ! nombre de archivo no especificado". ¿Hay alguna forma de no mostrarlo? He intentado con un campo IF, pero entonces mi imagen no funciona.
2) Me gustaría agrupar las etiquetas por servicio con el nombre del servicio mostrado en la parte superior de cada página y un salto de página al cambiar de servicio. Por ahora, aparte de editar un correo masivo diferente por servicio, no he logrado hacerlo.
Gracias por su ayuda.
13 respuestas
-
Hola,
El campo INCLUDEPICTURE puede causar un problema cuando intenta cargar una imagen con una URL vacía o incorrecta, lo que genera el error "Error! nombre de archivo no especificado". Es posible utilizar un campo condicional IF para evitar la visualización de este error, pero eso requiere algunos ajustes para no interrumpir la inserción de la imagen.
Modifique la estructura del campo IF: use un campo IF que verifique si el enlace a la imagen está vacío o no. Si el campo está vacío, no se mostrará nada; de lo contrario, se inserta la imagen.
La estructura del campo se verá así:
{ IF { MERGEFIELD "LienImage" } = "" "" "{ INCLUDEPICTURE { MERGEFIELD "LienImage" } \d }" }
Utilice la combinación de teclas Alt + F9 para alternar al modo "códigos de campo" en Word para poder insertar manualmente estos campos, ya que los corchetes { } no se pueden escribir directamente. Deben ser insertados con Ctrl + F9.
Una vez que termine la combinación de correspondencia, es posible que deba seleccionar todo el documento (Ctrl + A) y presionar F9 para actualizar todos los campos y forzar la visualización de las imágenes.
-
Gracias Bruno
Pero no, de hecho, ya lo he intentado y no funciona. Cuando uso un campo IF como se indica, la foto ya no se actualiza en el documento combinado al presionar F9.
-
De acuerdo. Pero puede que exista una alternativa con la adición de una imagen vacía en la base de datos.
Si el uso de macros no es práctico para ti, otra solución consiste en añadir un enlace a una imagen vacía directamente en tu fuente de datos (el archivo de Excel). Así, en lugar de tener celdas vacías en el campo "LienImage", insertas un enlace a una pequeña imagen transparente o blanca que creas previamente.Por ejemplo, en Excel, en lugar de tener campos vacíos para las personas sin foto, puedes reemplazar las celdas vacías por una URL hacia una imagen blanca (como C:\ruta\hacia\imagen_vacía.jpg).
Este enfoque garantiza que el campo INCLUDEPICTURE nunca encuentre una URL vacía, lo que evita el error sin requerir campos IF adicionales.
-
¿Has probado a utilizar un campo IF sin romper el enlace de la imagen?
Inserción de campos:
Siempre utiliza esta estructura de campo IF, pero sin encapsular directamente el INCLUDEPICTURE en el IF:
{ INCLUDEPICTURE { IF { MERGEFIELD "LienImage" } = "" "C:\\ruta\\hacia\\imagen_vacía.jpg" { MERGEFIELD "LienImage" } } \d }
-
Voy a intentar tu respuesta, pero para aclarar, en realidad no son campos vacíos en mi base de datos, tengo sistemáticamente un enlace; es en la hoja de etiquetas cuando ya no hay más datos, es el campo includepicture el que muestra un error en las etiquetas vacías restantes en la página.
-
Personalmente, no habría utilizado
INCLUDEPICTURE, que a menudo es caprichoso, especialmente cuando se combina con condiciones en un correo masivo.Un script de VBA es más fiable y permite controlar el comportamiento de las imágenes de manera más precisa.
Sin embargo, es necesario preparar tu archivo de Excel antes. Asegúrate de que en tu archivo de Excel tienes una columna con las URL de las imágenes y que tienes otras columnas con la información necesaria para el correo masivo.
En el editor de VBA, ve a Insertar > Módulo para crear un nuevo módulo.
Inserta el siguiente código:
Sub InsertImages() Dim doc As Document Dim r As Range Dim imgPath As String Dim i As Integer Dim dataField As String Dim imageCell As Range ' Inicialización del documento activo Set doc = ActiveDocument ' Recorre todos los registros del correo masivo For i = 1 To doc.MailMerge.DataSource.RecordCount ' Ir al registro actual doc.MailMerge.DataSource.ActiveRecord = i ' Obtener el enlace de la imagen desde la fuente de datos imgPath = doc.MailMerge.DataSource.DataFields("LienImage").Value ' Verificar si el enlace de la imagen no está vacío If imgPath <> "" Then ' Seleccionar el campo o celda donde debe insertarse la imagen Set r = doc.MailMerge.DataSource.DataFields("PositionImage") ' Eliminar el texto actual si es necesario r.Text = "" ' Insertar la imagen en la celda o en el lugar especificado doc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, Range:=r End If Next i End SubModifica el código para que se ajuste a tus necesidades
LienImage se refiere a la columna en tu archivo de Excel que contiene los enlaces de las imágenes.
PositionImage representa el lugar en el documento donde deseas insertar la imagen. Es posible que debas adaptar esta parte según la estructura de tu documento de Word.A continuación, ve a Ver > Macros > Mostrar macros, selecciona InsertImages y luego haz clic en "Ejecutar".
Ventajas de este método
Más flexibilidad: Puedes personalizar completamente dónde y cómo se insertan las imágenes.
Mejor manejo de errores: Si un enlace es inválido o está ausente, la macro puede ignorar esta imagen sin provocar un error visible.
Sin problemas de actualización: A diferencia del campo INCLUDEPICTURE, que a menudo requiere una actualización manual, la macro inserta directamente las imágenes en el documento.
-
Ya tengo este código en mi macro VBA en Excel para lanzar mi envío masivo
Sub EnvioMasivo() 'Llamar a AgregarReferencia Dim NombreBase As String Dim appWord As Object Set appWord = CreateObject("Word.application") Dim docWord As Object ' Ruta al archivo de Excel y al documento de Word NombreBase = "G:\24-Bureautique\01-Gestion des projets\Nelly en cours\Sénateurs nettoyé.xlsm" Dim DocWordPath As String DocWordPath = "G:\24-Bureautique\01-Gestion des projets\Nelly en cours\Fusion 348 sénateurs tableau - nettoyé.docx" ' Crear una instancia de Word Set appWord = CreateObject("Word.Application") appWord.Visible = True ' Apertura del documento de Word Set docWord = appWord.Documents.Open(DocWordPath) ' Configuración del envío masivo With docWord.MailMerge .MainDocumentType = 1 ' Abrir la base de datos de Excel con el controlador correcto .OpenDataSource Name:=NombreBase, _ Connection:="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & NombreBase & ";Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";", _ SQLStatement:="SELECT * FROM [Base$] WHERE [Groupe_politique] = 'Los Republicanos' ORDER BY Calidad DESC, Nombre" ' Especificar la fusión hacia un nuevo documento .Destination = wdSendToNewDocument .SuppressBlankLines = True ' Utilizar todos los registros disponibles With .DataSource .FirstRecord = 1 .LastRecord = -16 End With ' Ejecutar la operación de envío masivo .Execute Pause:=False End With appWord.Selection.wholestory appWord.Selection.Fields.Update ' Cerrar el documento fuente sin guardar docWord.Close False ' Liberar los objetos de Word Set docWord = Nothing Set appWord = Nothing ' Activar la actualización de la pantalla Application.ScreenUpdating = True End Sub
-
-
Genial, voy a intentar, pero ¿cómo especifico el lugar en mi documento de Word?
Confieso que aquí estoy perdida.
Mi objetivo habría sido llenar todos los campos vía VBA, pero estoy un poco desorientada... por ejemplo, nombre, apellido sabiendo que tengo las columnas en mi archivo de Excel, así como la columna "Foto" con el enlace URL de la foto.
Muchas gracias por su ayuda.
-
Hola,
Es necesario utilizar los marcadores o los campos de combinación (MergeField) para especificar la ubicación donde desea insertar las imágenes y otros datos.
Para las imágenes, puede utilizar un marcador en el documento de Word, y la macro utilizará este marcador para insertar la imagen en ese lugar.
Para otros datos (nombre, apellido, etc.), Word se encargará automáticamente a través de los campos de combinación estándar.Intente en su lugar con esta macro modificada:
Sub InsertImages() Dim doc As Document Dim imgPath As String Dim i As Integer Dim imageBookmark As Bookmark Dim mergeField As Field Dim nomField As Field, prenomField As Field ' Inicialización del documento activo Set doc = ActiveDocument ' Iniciar la combinación de correspondencia, recorrer todos los registros de la combinación For i = 1 To doc.MailMerge.DataSource.RecordCount ' Ir al registro actual doc.MailMerge.DataSource.ActiveRecord = i ' Obtener el enlace de la imagen desde la fuente de datos imgPath = doc.MailMerge.DataSource.DataFields("Foto").Value ' Verificar si el enlace de la imagen no está vacío If imgPath <> "" Then ' Verificar si el marcador para la imagen existe (por ejemplo "ImagePlace") If doc.Bookmarks.Exists("ImagePlace") Then ' Insertar la imagen en el marcador "ImagePlace" Set imageBookmark = doc.Bookmarks("ImagePlace") ' Eliminar el texto actual del marcador (si existe) imageBookmark.Range.Text = "" ' Insertar la imagen en la posición especificada por el marcador doc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, _ Range:=imageBookmark.Range End If End If ' Actualizar los campos como "Nombre" y "Apellido" a través de la combinación clásica For Each mergeField In doc.Fields If mergeField.Type = wdFieldMergeField Then If InStr(mergeField.Code.Text, "Nombre") > 0 Then mergeField.Result.Text = doc.MailMerge.DataSource.DataFields("Nombre").Value ElseIf InStr(mergeField.Code.Text, "Apellido") > 0 Then mergeField.Result.Text = doc.MailMerge.DataSource.DataFields("Apellido").Value End If End If Next mergeField Next i End SubMarcador para la imagen:
La macro ahora utiliza un marcador (nombrado "ImagePlace") para especificar dónde debe insertarse la imagen en el documento de Word. Debe agregar este marcador manualmente en su documento de Word en el lugar donde quiere que aparezca la imagen.
Campos de combinación (MergeFields):
Para insertar datos como el nombre y el apellido, puede agregar campos de combinación estándar (MergeField) en su documento de Word. La macro los recorre y reemplaza los valores de los campos de combinación correspondientes con los datos de la fuente.
Obtener los datos de Excel:
La macro accede a sus columnas en Excel utilizando doc.MailMerge.DataSource.DataFields("Nombre de la columna"). Debe asegurarse de que los nombres de las columnas en Excel coincidan exactamente con los nombres utilizados en la macro.
Ahora es necesario configurar el documento de Word:
Insertar un marcador para la imagen:
Vaya a su documento de Word.
Coloque el cursor donde desea que se inserte la imagen.
Vaya a la pestaña Insertar > Marcador, y luego nombre el marcador "ImagePlace".
Agregar los campos de combinación:
En Word, vaya a la pestaña Combinar correspondencia > Insertar un campo de combinación.
Inserte los campos Nombre, Apellido y otras columnas que tenga en su archivo de Excel.Cuando ejecute la macro, recorrerá cada registro de la combinación de correspondencia, insertará la imagen en la ubicación del marcador "ImagePlace" y llenará los otros campos (como el nombre y el apellido) con los datos provenientes de Excel.
Esto le permitirá personalizar su documento con imágenes y datos para cada registro de la combinación de correspondencia.
-
No funciona. No tengo ningún documento final combinado y además ninguna foto aparece en el marcador.
-
De acuerdo, si la macro no funciona como se esperaba y no produce un documento final fusionado con las fotos, esto puede deberse a varios factores.Asegúrate de que el mail merge esté preparado.
Configuración en Word
Campos de fusión: Tu documento de Word debe contener campos de fusión (<<Nombre>>, <<Apellido>>, etc.) en las ubicaciones apropiadas para insertar los datos desde Excel.
Marcador para la imagen: Agrega un marcador llamado "ImagePlace" en el documento de Word en el lugar donde deseas que se inserten las imágenes.A continuación, se presenta una macro revisada que gestiona correctamente el proceso de fusión e inserción de imágenes.
Sub InsertImagesAndMerge() Dim doc As Document Dim imgPath As String Dim i As Integer Dim imageBookmark As Bookmark Dim mergedDoc As Document Dim mergeField As Field Dim dataSource As MailMergeDataSource ' Inicialización del documento activo Set doc = ActiveDocument ' Ejecutar la fusión para crear un nuevo documento con todos los registros doc.MailMerge.Execute ' Recuperar el documento fusionado Set mergedDoc = ActiveDocument ' Recorre cada registro fusionado en el documento final Set dataSource = doc.MailMerge.DataSource For i = 1 To mergedDoc.MailMerge.DataSource.RecordCount ' Posicionar en el registro correcto mergedDoc.MailMerge.DataSource.ActiveRecord = i ' Obtener el enlace de la imagen desde la fuente de datos imgPath = mergedDoc.MailMerge.DataSource.DataFields("Photo").Value ' Verificar si el enlace de la imagen no está vacío If imgPath <> "" Then ' Verificar si el marcador para la imagen existe (por ejemplo "ImagePlace") If mergedDoc.Bookmarks.Exists("ImagePlace") Then ' Insertar la imagen en el marcador "ImagePlace" Set imageBookmark = mergedDoc.Bookmarks("ImagePlace") ' Eliminar el texto actual del marcador imageBookmark.Range.Text = "" ' Insertar la imagen en la posición especificada por el marcador mergedDoc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, _ Range:=imageBookmark.Range End If End If Next i End SubEjecuta la macro InsertImagesAndMerge.
El documento será fusionado y generará un nuevo archivo donde cada registro será procesado, y las imágenes se insertarán en el lugar del marcador "ImagePlace".Puntos de control si esto aún no funciona:
Asegúrate de que la fusión funcione: Deberías ver tus campos como <<Nombre>> y <<Apellido>> llenos correctamente después de la fusión.
Ruta de las imágenes: Verifica que las rutas de las imágenes sean correctas y accesibles.
Marcador presente: Asegúrate de que el marcador "ImagePlace" existe en tu documento en el lugar donde deseas insertar las imágenes.
-
Todo funciona excepto la imagen (no hay imagen), el marcador está bien y las rutas son correctas.
-
De acuerdo, dado que todo funciona excepto la inserción de las imágenes, es probable que el problema venga de la forma en que la imagen se inserta en el lugar del marcador. Voy a proponerte un enfoque más robusto para la inserción de imágenes utilizando un método alternativo para tratar los marcadores y las rutas de imagen.
Vuelvo enseguida.
-
Actualización de la macro para la inserción de imágenes
Sub InsertImagesAndMerge() Dim doc As Document Dim imgPath As String Dim i As Integer Dim imageBookmark As Bookmark Dim mergedDoc As Document Dim dataSource As MailMergeDataSource Dim imageRange As Range ' Inicialización del documento activo Set doc = ActiveDocument ' Ejecutar la fusión para crear un nuevo documento con todos los registros doc.MailMerge.Execute ' Recuperar el documento fusionado Set mergedDoc = ActiveDocument ' Recorre cada registro fusionado en el documento final For i = 1 To mergedDoc.MailMerge.DataSource.RecordCount ' Ir al registro actual mergedDoc.MailMerge.DataSource.ActiveRecord = i ' Obtener el enlace de la imagen desde la fuente de datos imgPath = mergedDoc.MailMerge.DataSource.DataFields("Photo").Value ' Verificar si el enlace de la imagen no está vacío y que la imagen existe If imgPath <> "" And Dir(imgPath) <> "" Then ' Verificar si el marcador para la imagen existe (por ejemplo "ImagePlace") If mergedDoc.Bookmarks.Exists("ImagePlace") Then ' Recuperar el rango del marcador Set imageRange = mergedDoc.Bookmarks("ImagePlace").Range ' Eliminar el marcador actual para evitar conflictos al insertar mergedDoc.Bookmarks("ImagePlace").Delete ' Insertar la imagen en el lugar del marcador mergedDoc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, _ Range:=imageRange End If End If Next i End SubLa línea If imgPath <> "" And Dir(imgPath) <> "" Then verifica que el enlace de la imagen no esté vacío y que la imagen exista en la ubicación especificada antes de intentar insertarla.
Si el marcador existe, se elimina justo antes de insertar la imagen en su lugar. Esto evita que el marcador permanezca en el documento y cause problemas durante la inserción.
El rango del marcador (Range) se utiliza para insertar la imagen en el lugar preciso donde estaba ubicado el marcador, incluso después de la eliminación del marcador.
Paso adicional a verificar
Verifica las rutas de imagen: Asegúrate de que las rutas de imagen en Excel sean correctas y que apunten a archivos de imagen existentes (formato JPG, PNG, etc.).Ejecutar la macro
Si el marcador "ImagePlace" está bien colocado, la macro ahora insertará la imagen en la ubicación correcta.
También prueba con una imagen local para evitar problemas relacionados con permisos o rutas incorrectas.Si deseas probar rápidamente si la ruta de la imagen es correcta, puedes agregar esta línea en la macro para mostrar la ruta en un cuadro de mensaje antes de la inserción de cada imagen:
MsgBox "Ruta de la imagen: " & imgPath
Esto te permite verificar visualmente que se está utilizando la ruta correcta para cada imagen.