vba: copiar texto al portapapeles
25/01/2023vba: Introducción al VBIDE
27/01/2023
Option Compare Database
Option Explicit
Public Sub ImgageView(ImgPath As String)
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Fuente : https://access-global.net/vba-utilizar-una referencia-en-tiempo-de-ejecucion
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Título : ImgageView
' Autor original : zxs23 (https://www.forosdelweb.com/f69/como-ejecutar-imagen-con-visor-imagenes-windows-935362/)
' Adaptado : Luis Viadel
' Creado : enero 2023
' Propósito : mostrar una imagen en el visor de imágenes de Windows
' Argumento/s : La sintaxis de la rutina consta del siguiente argumento:
' Nombre Modo Descripción
'-----------------------------------------------------------------------------------------------------------------------------------------------
' ImgPath Obligatorio Dirección completa del fichero de imagen que queremos visualizar
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Referencias : https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryw
' : https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getprocaddress
' : https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-callwindowproca
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Test: : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copia el bloque siguiente al
' portapapeles y pega en el editor de VBA. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
'
'Sub ImgageView_test()
'Dim ImgPath As String
'
' ImgPath = "Dirección de la imagen"
'
' Call ImgageView(ImgPath)
'
'End Sub
'
'-----------------------------------------------------------------------------------------------------------------------------------------------
Dim Lib As Long
Dim LibAdd As Long
Lib = LoadLibrary("shimgvw")
LibAdd = GetProcAddress(Lib, "imageview_fullscreenW")
CallWindowProc LibAdd, 0&, 0&, StrPtr(ImgPath), 0&
'Liberar la librería
FreeLibrary Lib
End Sub
4 Comments
Una cuestión…
¿ ‘Liberar la librería «FreeLibrary LibAdd» no debería ser «FreeLibrary lib» ?
Lo comento porque la librería se carga en la variable «lib» (lib = LoadLibrary(«shimgvw»)), y «LibAdd» obtiene la dirección de la llamada al punto de ejecución ( LibAdd = GetProcAddress(lib, «imageview_fullscreenW») )
La ejecución se realiza con «CallWindowProc LibAdd, 0&, 0&, StrPtr(ImgPath), 0& «, es decir, se llama al procedimiento ubicado en la dirección obtenida por GetProcAddress, mientras que la librería se ha cargado en en la variable lib.
Un cordial saludo a todos.
Alba.
Gracias Alba, siempre tan atenta. He utilizado erróneamente la variable de la dirección.
Lo corregimos en la entrada.
Como se usa Python en lugar de VBA???
como uso una función en Python desde access, y que regrese un valor????
Tendrás algo al respecto, Gracias
Disculpa el retraso. Nunca se nos ha dado esta situación. Si nos planteas algo más concreto, intentaremos ayudarte.