Option Compare Database
Option Explicit

'********************************************************************************************
'Fecha Creación:    20/07/2002
'Desarrollador:     McPegasus, www.mcpegasus.es.org
'Contacto:          Ruego envíes tus comentarios y mejoras a: mcpegasus@iespana.es
'Propósito:         Imprimir un documento en Vista Previa o Imprimir presentando el cuadro _
                    de diálogo para seleccionar la impresora.
'********************************************************************************************

Private Sub Demomc_Imprimir()
    
    Dim strRptNombre As String

    strRptNombre = "rptBuscar"
    
    Call mc_Imprimir(False, strRptNombre, 2)

End Sub

Public Function mc_Imprimir(blnVistaPrevia As Boolean, strInforme As String, _
                                Optional intCopias As Integer = 1, Optional strFrmNombre)
'Última actualización: 20/07/2002
'Imprimir un documento presentando el cuadro de diálogo para seleccionar la impresora.
'NOTAS: _
    - Se establece como Function en lugar de Sub, para poder referenciar el procedimiento _
        en una base de datos externa. _
    - Se necesita la función mc_blnComprobarInforme, componente del Clan McPegasus. _
        www.mcpegasus.es.org
    
'La sintaxis de la función consta de estos argumentos:
'Parte              Descripción
'-------------------------------------------------------------------------------------------
'blnVistaPrevia     Requerido.  Expresión booleana que corresponde al tipo de salida _
                                del informe, _
                                    True,  Vista previa del informe. _
                                    False, Abre el cuadro de diálogo de impresoras.
'strInforme         Requerido.  Nombre del informe a imprimir.
'intCopias          Opcional.   Cantidad de copias a imprimir.
'strFrmNombre       Opcional.   Nombre del formulario donde se utiliza la función, en _
                                caso de error, nos indica desde donde se produce.

On Error GoTo Err_CapturarError

    'Comprobar si existe el nombre del informe.
    If Not mc_blnComprobarInforme(strInforme) Then
        'No Existe
        If Not IsMissing(strFrmNombre) Then
            'Si el argumento se ha pasado ...
            MsgBox "No existe el informe: " & strInforme _
                , vbCritical + vbOKOnly, "McPegasus informa desde " & strFrmNombre
        Else
            MsgBox "No existe el informe: " & strInforme _
                , vbCritical + vbOKOnly, "McPegasus informa."
        End If
    Else
        If blnVistaPrevia = True Then
            DoCmd.OpenReport strInforme, acPreview
        Else
            DoCmd.OpenReport strInforme, acPreview
            DoCmd.RunCommand acCmdPrint                 'Presentar diálogo de impresoras.
            If Not intCopias = 1 Then DoCmd.PrintOut , , , , intCopias - 1
            DoCmd.Close acReport, strInforme
        End If
    End If

Salida:
    Exit Function

Err_CapturarError:
    Select Case Err.Number
        Case 2501               'Se ha cancelado el RunCommand acCmdPrint.
            DoCmd.Close acReport, strInforme
            Resume Salida
        Case Else
            'Capturar todos aquellos errores inesperados.
            If Not IsMissing(strFrmNombre) Then
                'Si el argumento se ha pasado ...
                MsgBox Err.Number & " " & Err.Description, vbCritical + vbOKOnly, _
                        "McPegasus informa desde " & strFrmNombre
            Else
                MsgBox Err.Number & " " & Err.Description, vbCritical + vbOKOnly, _
                        "McPegasus informa."
            End If
    End Select
    Resume Salida

End Function

Sub demomc_blnComprobarInforme()

    MsgBox mc_blnComprobarInforme("rptBuscar", False)

End Sub

Public Function mc_blnComprobarInforme(strNombreInforme As String, _
                                       Optional blnExiste As Boolean = True) As Boolean
'Actualización:     20/07/2002
'Desarrollador:     McPegasus, www.mcpegasus.es.org

'Comprobar si un informe existe en el contenedor de informes o está abierto (cargado).
'Devuelve True en caso de que la comprobación es correcta.

'La sintaxis del Procedimiento o Función, consta de estos argumentos:
'Parte                          Descripción
'-------------------------------------------------------------------------------------------
'strNombreInforme:  Requerido.  Nombre del informe a comprobar.
    
'blnExiste:         Opcional.   Modo de busqueda del informe. _
                                True:   Buscar si existe en el contenedor de informes _
                                False:  Buscar si está cargado.

On Error GoTo Err_CapturarError
   
    Dim Db          As Database
    Dim docBucle    As Document
                                
    If blnExiste Then
        Set Db = CurrentDb()
        For Each docBucle In Db.Containers!Reports.Documents
            If docBucle.Name = strNombreInforme Then
                mc_blnComprobarInforme = True
                Exit For
            End If
        Next docBucle
        Db.Close
    Else
        'Fecha Creación:    2000
        'Autor:             José A. Giménez
        If SysCmd(acSysCmdGetObjectState, acReport, strNombreInforme) <> 0 _
            Then mc_blnComprobarInforme = True
    End If

Salida:
    Exit Function

Err_CapturarError:
    Select Case Err.Number
        Case Else
            MsgBox Err.Number & " " & Err.Description, _
                    vbCritical + vbOKOnly, "McPegasus informa."
    End Select
    Resume Salida


End Function




    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)