none
¿Cómo girar una imagen insertada en un documento Word, a través de una macro en Visual Basic? RRS feed

Todas las respuestas

  • Hola!

    si puedes girarla antes de insertarla, aquí tienes el código para hacerlo

    '*******************************************************************************
    '* RotarImagen
    '* recorta la imagen pasada como parámetro
    '* Deberá incluir una referencia a Microsoft Windows Image Acquisition Library vX.X
    '* Argumentos: strArchivo => Ruta de la imágen a convertir
    '*             bytAngulo  => angulo de rotación (90, 180, o 270º)
    '* uso: RotarImagen "C:\Temp\Prueba.jpg", 90
    '* ESH 14/07/20 17:20
    '* Si utilizas este codigo, respeta la autoría y los créditos
    '*******************************************************************************
     
    Public Sub RotarImagen(strArchivo As String, intAngulo As Integer)
    Dim CD As WIA.CommonDialog, _
        IP As ImageProcess, _
        Imagen As WIA.ImageFile
     
    On Error GoTo RotarImagen_TratamientoErrores
    
    Select Case intAngulo
       Case 9, 180, 270
       Case Else
          Err.Raise Number:=vbObjectError + 512, Description:="El angulo a rotar ha de ser 90, 180, o 270º"
    End Select
    
    Set CD = CreateObject("WIA.CommonDialog")
     
    Set Imagen = CreateObject("WIA.ImageFile")
    Imagen.LoadFile (strArchivo)
     
    Set IP = CreateObject("WIA.ImageProcess")
     
    IP.Filters.Add IP.FilterInfos("RotateFlip").FilterID
    IP.Filters(1).Properties("RotationAngle") = intAngulo
    
    Set Imagen = IP.Apply(Imagen)
     
    strArchivoRecortado = Replace$(strArchivo, ".", ".rotada.")
    If Not Dir$(strArchivoRecortado) = vbNullString Then Kill strArchivoRecortado
    Imagen.SaveFile strArchivoRecortado
     
     
    RotarImagen_Salir:
       If Not Imagen Is Nothing Then Set Imagen = Nothing
       If Not IP Is Nothing Then Set IP = Nothing
       If Not CD Is Nothing Then Set CD = Nothing
       On Error GoTo 0
       Exit Sub
       
    RotarImagen_TratamientoErrores:
       MsgBox "Error " & Err & " en proc.: RotarImagen de Módulo: mdlEscanearWIA (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
       Resume RotarImagen_Salir
    Resume Next
    End Sub        ' RotarImagen


    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/


    martes, 14 de julio de 2020 15:36
  • Hola!

    si puedes girarla antes de insertarla, aquí tienes el código para hacerlo

    Apreciado Emilio: Mucha gracias, antes que nada.

    No consigo la forma de “incluir una referencia a Microsoft Windows Image Acquisition Library vX.X”.

    No estoy seguro de haberme expresado bien. Yo estoy manejando las Macros de Microsoft Word; el Visual Basic para Aplicaciones que viene con Word.

    La rotación de las imágenes con una aplicación externa la vengo resolviendo con Photoshop, con una macro que se activa automáticamente cuando se carga la imagen. Y con el truquito de lanzarle las imágenes automáticamente, con un programa en C++, una detrás de otra, consigo rotar cientos de imágenes en muy poco tiempo.

    Buscaba un modo de automatizar más, sin recurrir al programa externo.

    Si tu subrutina se puede implementar dentro de una Macro de Word, sería una solución magnífica.

    Gracias de nuevo.

    Un saludo atento.

    Antonio Cabrera


    miércoles, 15 de julio de 2020 2:38
  • Ese procedimiento debe correr en un módulo de Word, lo que no puedo asegurarte es si tienes o no la posibilidad de añadir esa referencia, en versiones anteriores a windows 10 venía de serie, si migraste a windows 10 posiblemente la tengas, si el windows 10 es original, probablemente no venga, en cuyo caso habrías de instalar WIA, lo que no parece ser demasiado fácil, desconozco porque microsoft ha decidido darle de lado y lo que es peor, no ofrecer una alternativa.

    Saludos.


    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    miércoles, 15 de julio de 2020 10:15
  • En mi Windows 10, en el directorio System32, hay una librería, entre muchas otras con “WIA…”, que se llama "wiaaut.dll", tal vez es esta. Es un Windows original y actualizado.

    Esa misma librería me la descargué de una Web, en una versión para Windows XP.

    Pero la macro da el error:


    Saludos.

    miércoles, 15 de julio de 2020 16:08
  • El mensaje de error es este:

    miércoles, 15 de julio de 2020 16:10
  • Lo cierto es que si tienes WIA instalado podrías obviar la referencia haciendo un "late binding" y declarando los objetos como tales y no como lo que son en realidad, con el ello el proceso será mas lento pero funcionará igual

    Dim CD As Object, _
        IP As Object, _
        Imagen As Object

    De cualquier modo para declarar la referencia, solo tienes que buscarla


    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    miércoles, 15 de julio de 2020 16:41
  • Emilio:

    Creo que Microsoft tiene desactivada la opción Referencias en esta aplicación. Aparece en gris, o sea que está desactivada. No lo he conseguido.

    Seguiré estudiando.

    Muchísimas gracias por tu ayuda.

    Un saludo atento.

    Antonio Cabrera

    sábado, 18 de julio de 2020 6:21
  • Nunca he visto las referencias desactivadas, salvo claro en modo depuración, pero deberías poder activar y desactivar.


    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    sábado, 18 de julio de 2020 21:56