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