|
|
API : Imprimir un fichero o documento
| Autor/es: Francisco Javier García Aguado | | Pregunta : ¿Cómo puedo desde Access y con código, imprimir un fichero o documento externo a la aplicación de Access? | Respuesta : Se puede utilizar una función del API llamada ShellExecute. Entre otras cosas, esta función tiene la habilidad de imprimir ficheros o documentos.
En algunos casos, como los documentos PDF o los archivos de texto plano, el documento será enviado directamente a la impresora, apareciendo solamente el pequeño cuadro de diálogo que avisa que se ha enviado un documento a la impresora. En otros casos, como por ejemplo un documento de Word o Excel, es posible que se abra momentáneamente la ventana de la aplicación a la que pertenece dicho documento, para inmediatamente después cerrarse.
Para facilitar todo esto he creado una función llamada PrintFile. El uso de esta función es muy simple: | Dim Resultado As Variant
' enviamos el fichero a la impresora
Resultado = PrintFile("c:\MiFichero.pdf")
If Resultado = True Then
MsgBox "El documento se envió a la impresora"
Else
MsgBox Resultado
End If
| La función PrintFile devuelve True en caso de tener éxito, o el mensaje de error devuelto por el sistema, en caso contrario.
Copia este código en un módulo estandar (las declaraciones de funciones del API y declaraciones de constantes han de situarse siempre por encima de cualquier procedimiento o función) | '---------------------------------------------------------
'
' PrintFile
'
' Código escrito originalmente por Francisco Javier García
' Aguado (Búho)
' 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
'
' buhonews@mvp-access.com
'
' Este código se brinda por cortesía de
' Francisco Javier García Aguado (Búho)
'
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_HIDE = 0&
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
' función que imprime un documento de cualquier aplicación
Public Function PrintFile(FileName As String) As Variant
Dim RetVal As Long
Dim sError As String
Dim LenMsg As Long
' se manda imprimir el documento
RetVal = ShellExecute(0&, "print", FileName, 0&, vbNullString, SW_HIDE)
' 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
PrintFile = Left(sError, LenMsg - 1)
Else
' la función tuvo éxito
PrintFile = True
End If
End Function
'---------------------------------------------------------
| Ejemplos: | Temas relacionados: OpenFile. Abrir un archivo ejecutable o un documento |
|