|
|
API : OpenFile. Abrir un archivo ejecutable o un documento
| Autor/es: Juan M Afán de Ribera | | Pregunta : ¿Qué código puedo utilizar para abrir un documento, sin tener que conocer la ruta del ejecutable al cual está asociado el documento? | | Respuesta : En Access tienes la instrucción | Application.FollowHyperlink [ruta del archivo]
| que tendrá el mismo efecto que el producido por un campo de tipo hipervínculo.
Este método es simple, claro y sencillo. Pero, en según qué circunstancias, podemos recibir un mensaje algo molesto (si queremos que el proceso sea transparente para el usuario) sobre la posibilidad de que algunos ficheros puedan contener virus, y bla, bla, bla...
Para poder evitar estos mensajes y conservar la funcionalidad de Application.FollowHyperlink debemos utilizar el API de Windows. A continuación os expongo una función para poder conseguirlo. Esta función (OpenFile) devuelve True, en caso de tener éxito, o un mensaje del sistema explicando el error que se haya producido.
Ejemplo de uso: | Dim Resultado As Variant
' intentamos abrir el archivo
Resultado = OpenFile("C:\MiArchivo.txt")
' si ha habido cualquier problema ...
If Resultado <> True Then
' mostramos el mensaje que nos envía el sistema
MsgBox Resultado
End If
| | Pega este código en un módulo estandar: | '---------------------------------------------------------
'
' OpenFile
'
' Código escrito originalmente por Juan M. Afán de Ribera
'
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' accessvbafaq@mvp-access.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Private Declare Function FormatMessage Lib "kernel32" _
Alias "FormatMessageA" _
(ByVal dwFlags As Long, _
lpSource As Any, _
ByVal dwMessageId As Long, _
ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, _
ByVal nSize As Long, _
Arguments As Long) As Long
Private Const SW_NORMAL = 1&
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
' función que abre cualquier archivo ejecutable o documento
' que esté registrado en el sistema con su respectiva aplicación
Public Function OpenFile(FileName As String) As Variant
Dim RetVal As Long
Dim sError As String
Dim LenMsg As Long
' se manda abrir el archivo
RetVal = ShellExecute(0&, "open", FileName, 0&, vbNullString, SW_NORMAL)
' si se ha producido algún error
If RetVal < 33 Then
sError = Space(1024)
' obtenemos el mensaje de error que manda el sistema
LenMsg = FormatMessage( _
FORMAT_MESSAGE_FROM_SYSTEM, _
ByVal 0&, _
RetVal, _
0&, _
sError, _
Len(sError), _
0&)
' devolvemos el mensaje de error
OpenFile = Left(sError, LenMsg - 1)
Else
' la función tuvo éxito
OpenFile = True
End If
End Function
'---------------------------------------------------------
| Ejemplos: | Temas relacionados: Imprimir un fichero o documento |
|