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