Option Compare Database
Option Explicit
Function ImprimeReporteLejano(NombreReporte As String, Optional ModoApertura As String, Optional FiltroReporte As String, Optional WhereReporte As String)
' Francisco García Aguado Febrero de 2002
' Esta rutina trata de imprimir un reporte fuera de esta base de datos
' con origen de datos en la Mdb, vinculada en ruta de vinculacion del programa
' El problema se plantea: Primero hay que localizar automaticamente la ruta
' de vinculacion del programa->Funcion RutaVinculacion
' Una vez localizada, se trata de que dicho reporte recoja los datos Reales
' que el usuario tiene en esos momentos para imprimir.-
Dim AplicAccesS As Access.Application
Dim BaseLejana As String
Set AplicAccesS = New Access.Application
' Abrir la base de datos en Microsoft Access lejana. En este caso
' la que contiene las tablas vinculadas y el Reporte a imprimir
' Primero pongo la ruta de Vinculacion.-
' y la meto en el string BaseLejana
BaseLejana="C:\MiCarpeta\MisDatos.mdb"
AplicAccesS.OpenCurrentDatabase BaseLejana
AplicAccesS.DoCmd.OpenReport NombreReporte, acViewNormal, FiltroReporte, WhereReporte
MsgBox "Haga clic en Aceptar cuando " & NombreReporte & _
" haya terminado de imprimirse.", vbInformation + vbOKOnly, "Imprimiendo..."
AplicAccesS.CloseCurrentDatabase
Set AplicAccesS = Nothing
End Function
'La llamada a esta función, desde cualquier botón de comando de un formulario
'sería muy simple:
ImprimeReporteLejano "TuReporte", acViewNormal
Otra consideración. Si no sabes cual es la ruta completa de la MDB
que contiene las tablas vinculadas y los reportes, en vez de poner la linea fija:
BaseLejana="C:\MiCarpeta\MisDatos.mdb"
podrías poner
BaseLejana=RutaVinculacion
donde Rutavinculacion es la siguiente función que te devuelve
automaticamente la ruta de la MDB de tablas vinculadas y reportes:
'Esto iría en otro modulo BAS para no mezclar funciones:
Option Compare Database
Option Explicit
Private BaseDatosActual As Database
Private CadenaNombreTablaVinculada As String
Private StrRutaVinculacionBD As String
Private VariableContadorInteger As Integer
'*******************************************
Function RutaVinculacion() As String
On Error GoTo Etiqueta_Error_Click
'Referencio Base de datos actual: Hay dos métodos. Escoger el que se quiera
'(A)
'Set BaseDatosActual = OpenDatabase(CodeDb.Name)
'(B)
Set BaseDatosActual = CurrentDb
'================================================
'Recorro la colección de tablas de la base actual
'buscando alguna Tabla Vinculada
'================================================
For VariableContadorInteger = 0 To BaseDatosActual.TableDefs.Count - 1
If Left(BaseDatosActual.TableDefs(VariableContadorInteger).Name, 4) <> "MSys" Then
If (BaseDatosActual.TableDefs(VariableContadorInteger).Attributes And dbAttachedTable) Or (BaseDatosActual.TableDefs(VariableContadorInteger).Attributes And dbAttachedODBC) Then
CadenaNombreTablaVinculada = BaseDatosActual.TableDefs(VariableContadorInteger).Name
StrRutaVinculacionBD = BaseDatosActual.TableDefs(CadenaNombreTablaVinculada).Connect
StrRutaVinculacionBD = Mid(StrRutaVinculacionBD, 11, Len(StrRutaVinculacionBD))
'si hemos entrado aquí es que ya tenemos la ruta de las tablas
'vinculadas. Muestro el mensaje correspondiente.-
RutaVinculacionBD = StrRutaVinculacionBD
BaseDatosActual.Close
Set BaseDatosActual = Nothing
Exit Function
End If
End If
Next VariableContadorInteger
'Si llego aquí, es que esta base de datos no tiene Tablas Vinculadas
RutaVinculacionBD = ""
BaseDatosActual.Close
Set BaseDatosActual = Nothing
Exit_Funcion:
Exit Function
Etiqueta_Error_Click:
MsgBox "Se ha producido el Error Nº: " & Err.Number & " ." & Err.Description, vbCritical + vbOKOnly, "Error de Datos"
Resume Exit_Funcion
End Function
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)