Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
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

 

Última actualización: 28/9/2005