Amallolm muy precisa tu respuesta anterior, me ayuda mucho, ahora tengo otra consulta: Tengo un informe hecho en access, el cual llamo desde visual para imprimir, este informe es producto de una consulta que hice en access, lo que me gustaría es desde visual basic modificar la consulta para que el informe se imprima con dichos cambios, en definitiva quiero que la consulta tenga un filtro así el informe se imprime con dicho filtro.
Gracias
No sé si he entendido bien tu pregunta, pero te mando un pequeño ejemplo que creo que te puede servir de orientación para hacer lo que tu deseas. Este ejemplo utiliza el método CopyQueryDef para crear una copia de un objeto QueryDef de un objeto Recordset existente y modifica la copia agregando una cláusula a la propiedad SQL. Cuando crea un objeto QueryDef permanente, los espacios en blanco, puntos y comas o avances de línea se pueden agregar a la propiedad SQL; estos caracteres adicionales se deben quitar antes de adjuntar cláusulas nuevas a la instrucción SQL. Function CopiarNuevaConsulta(rstTemp As Recordset, _ strAgregar As String) As QueryDef Dim strSQL As String Dim strDerechaSQL As String Set CopiarNuevaConsulta = rstTemp.CopyQueryDef With CopiarNuevaConsulta ' Quita caracteres adicionales. strSQL = .SQL strDerechaSQL = Right(strSQL, 1) Do While strDerechaSQL = " " Or strDerechaSQL = ";" Or _ strDerechaSQL = Chr(10) Or strDerechaSQL = vbCr strSQL = Left(strSQL, Len(strSQL) - 1) strDerechaSQL = Right(strSQL, 1) Loop .SQL = strSQL & strAgregar End With End Function Este ejemplo muestra un posible uso de CopiarNuevaConsulta(). Sub CopiarDefConsulta() Dim dbsNeptuno As Database Dim qdfEmpleados As QueryDef Dim rstEmpleados As Recordset Dim intComando As Integer Dim strOrdenarPor As String Dim qdfCopiar As QueryDef Dim rstCopiar As Recordset Set dbsNeptuno = OpenDatabase("Neptuno.mdb") Set qdfEmpleados = dbsNeptuno.CreateQueryDef("NuevoQueryDef", _ "SELECT Nombre, Apellidos, FechaNacimiento FROM _ Empleados") Set rstEmpleados = qdfEmpleados.OpenRecordset(dbOpenSnapshot, _ dbForwardOnly) Do While True intComando = Val(InputBox( _ "Elija el campo por el que ordenar un nuevo_ "Recordset:" & vbCr & "1 - Nombre" & vbCr &_ "2 - Apellidos" & vbCr & "3 - Fecha de _ "nacimiento" & vbCr & "[Cancelar - salir]")) Select Case intComando Case 1 strOrdenarPor = " ORDER BY Nombre" Case 2 strOrdenarPor = " ORDER BY Apellidos" Case 3 strOrdenarPor = " ORDER BY FechaNacimiento" Case Else Exit Do End Select Set qdfCopiar = CopiarNuevaConsulta(rstEmpleados, strOrdenarPor) Set rstCopiar = qdfCopiar.OpenRecordset(dbOpenSnapshot, _ dbForwardOnly) With rstCopiar Do While Not .EOF Debug.Print !Apellidos & ", " & !Nombre & " - " & _ !FechaNacimiento .MoveNext Loop .Close End With Exit Do Loop rstEmpleados.Close ' Elimina el nuevo QueryDef porque esto es un ejemplo. dbsNeptuno.QueryDefs.Delete qdfEmpleados.Name dbsNeptuno.Close End Sub