Imprimir página | Cerrar ventana

Macro para reemplazar textos por imágenes en Word

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Word
Descripción del foro: Foro de Word
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85878
Fecha de impresión: 20/Abril/2024 a las 14:32


Tema: Macro para reemplazar textos por imágenes en Word
Publicado por: Alenielxd
Asunto: Macro para reemplazar textos por imágenes en Word
Fecha de publicación: 13/Marzo/2021 a las 00:34
Cordial saludo a todos

Quisiera comentarles que he estado tratando de buscar una macro que me permita reemplazar ciertas palabras clave de un documento de Microsoft Word por imágenes con extensión ".png" que están alojadas en una carpeta del computador. Para evitar que la macro reemplace palabras de uso común, las palabras clave comienzan con los 4 caracteres "!!##". Lo que se quiere es que esta macro haga lo siguiente:

- Busque palabras clave que empiezan por los 4 caracteres especiales: "!!##" ejemplo: !!##MANZANA, !!##PERA, !!##COMPUTADOR, etc...
- Una vez que identifique las palabras clave deberá reemplazar estas por las imágenes que llevan el mismo nombre y que están en una misma carpeta, ejemplo: MANZANA.PNG, PERA.PNG, COMPUTADOR.PNG, etc...
- Las imágenes tienen que ajustarse al ancho del documento de manera automática.

Si pudieran ayudarme con este requerimiento se los agradecería mucho
Mil gracias de antemano.
Saludos



Respuestas:
Publicado por: Mihura
Fecha de publicación: 13/Marzo/2021 a las 08:41
Hola, bienvenido al foro.

En el foro hay ejemplos de sustitución con marcadores, usa el buscador para encontrarlos (no te olvides marcar que busque en cualquier fecha).




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: prga
Fecha de publicación: 13/Marzo/2021 a las 13:52
Hola.
El método find de word tiene el símbolo ! como reservado y como consecuencia la búsqueda se complica.
De todas formas prueba el siguiente código:

Sub ponefotos()
Dim miimagen As InlineShape
Dim miruta As String
    Selection.Find.ClearFormatting
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .Text = " ? [ ! ][ ! ] # # * , "  ''''''HAY QUE QUITAR LOS ESPACIOS
        .Forward = True
        .Wrap = wdFindAsk
        .MatchWildcards = True
    End With
  Do While Selection.Find.Execute
    miruta = Replace(Selection.Text, ",", ".png")
    miruta = ActiveDocument.Path & "\fotos\" & Replace(miruta, "!!##", "")
    If Dir(miruta) <> "" Then
      MsgBox (miruta)
''       Set miimagen = Selection.InlineShapes.AddPicture(FileName:=miruta, LinkToFile:=False, SaveWithDocument:=True)
''       miimagen.LockAspectRatio = msoTrue
''       miimagen.Height = CentimetersToPoints(2)
     End If
  Loop
End Sub

Este código es a título de ejemplo y se tendrá que depurar, optimizar etc etc  para su uso en el documento definitivo
Se supone que el nombre de las imágenes proviene de algo como "!!##xxxxxxxxxxxx," siendo xxxx el nombre de la foto y que empieza por los 4 caracteres mencionados y termina en una coma(,)
Adáptalo y ya comentas.
Un saludo a todos


editado por que aparecieron símbolos extraños en el .Text = "?##*,"


Publicado por: Alenielxd
Fecha de publicación: 15/Marzo/2021 a las 15:45
Hola prga

Muchísimas gracias por su colaboración. Lastimosamente yo no entiendo mucho sobre programación VBA, pero creo que se ha entendido bien la idea de lo que necesito. Con respecto al código inicial "!!##" no se preocupe no tengo ningún problema en cambiar los símbolos de admiración "!!" por arrobas "@@" de modo que el código inicial podría quedar así: "@@##".

Por otra parte, he probado la macro que me ha proporcionado, quité los espacios como usted me sugirió y cambié donde decía "\fotos\" por "C:\Users\Desktop\Imagenes\" (porque esta es la ruta donde tengo las imágenes), sin embargo, no he conseguido hacerlo funcionar ¿Qué estaré haciendo mal?

Agradezco su gentil ayuda
Saludos


Publicado por: prga
Fecha de publicación: 15/Marzo/2021 a las 17:34
Hola.
Prueba así:
Sub ponefotos()
Dim miimagen As InlineShape
Dim miruta As String
    Selection.Find.ClearFormatting
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
        .Text = "?[!][!]##*,"  
        .Forward = True
        .Wrap = wdFindAsk
        .MatchWildcards = True
    End With
  Do While Selection.Find.Execute
    miruta = Replace(Selection.Text, ",", ".png")
    miruta = "C:\Users\Desktop\Imagenes\"  & Replace(miruta, "!!##", "")
    If Dir(miruta) <> "" Then
       Set miimagen = Selection.InlineShapes.AddPicture(FileName:=miruta, LinkToFile:=False, SaveWithDocument:=True)
       miimagen.LockAspectRatio = msoTrue
       miimagen.Height = CentimetersToPoints(2)
     End If
  Loop
End Sub

Suponiendo que la ruta de las fotos es  C:\Users\Desktop\Imagenes\
Está corregido de memoria.
Ya comentas
Un saludo a todos


Publicado por: Alenielxd
Fecha de publicación: 15/Marzo/2021 a las 17:53
Hola prga

Muchísimas gracias por su ayuda, la macro funciona correctamente. Las imágenes salen un poco pequeñas pero quité esta parte de la macro: "miimagen.Height = CentimetersToPoints(2)" y sin esa instrucción se ajustan de manera automática al ancho de la página.

Saludos



Imprimir página | Cerrar ventana