Abrir informe desde formulario con lista desplegable.

Quiero crear una lista desplegable que me muestre los informes existentes en mi base de datos, y que al seleccionar uno, lo abra.

Agradeceré una respuesta sin uso de código, o por contra, explicada paso a paso... Soy nuevo en esto!

1 Respuesta

Respuesta
1

Lo que pides es fácil, mediante código. Te explico como hacerlo:

1º Creas el cuadro combinado en el formulario, cancelando el asistente si te sale.

2º Click Derecho en el cuadro combinado, Propiedades

->En la pestaña Otras, en nombre le pones: cboInformes

-> En la pestaña Datos, en Tipo de rigen de la Fila, le pones Lista de Valores

->En la pestaña Eventos, en el evento Al Entrar, le das a los puntos suspensivos que aparecen en un cuadradito a la derecha del mismo (...) le das a generar código, y escribes lo siguiente, entre las lineas Private Sub ... y End Sub:

Dim miOrigen As String
Dim miInforme As Object
'Inicializamos la variable miOrigen como una cadena vacía
miOrigen = ""
'Recorremos la colección "Informes"
For Each miInforme In CurrentProject.AllReports
miOrigen = miOrigen & miInforme .Name & ";"
Next miInforme
'Quitamos el último ; de la lista
miOrigen = Left(miOrigen, Len(miOrigen) - 1)
With Me.cboInforme
.LimitToList = True
.RowSource = miOrigen
End With

Con eso, ya tienes listados en el desplegable todos tus informes. Para que te lo muestre, o bien lo haces por medio de un botón, o que lo haga al seleccionarlo. Te explico las dos opciones y eliges la que más te convenga.

1/ Mostrar informe directamente al seleccionarlo: En la pestaña Eventos del cuadro combinado, seleccionas evento Después de Actualizar, le das a los (...), generador de código, y escribes entre las lineas Private Sub ... y End Sub:

On Error GoTo sol_err
DoCmd.OpenReport Me.cboInforme.Value, acPreview, , , acDialog
cboInformes = ""
Salida:
Exit Sub
sol_err:
MsgBox Err.Description
Resume Salida

2/ Para ver el informe mediante un botón, colocas un botón de comando junto al cuadro combinado, sacas sus propiedades, en la pestaña Otras, le pones de nombre cmdInforme, y en la pestaña Eventos, evento Al Hacer Click, le das a los (...) Generador de código y le pones el mismo código que la opción de arriba.

Una aclaración, la línea cboInformes="", lo que hace es poner en blanco el cuadro combinado, una vez que te muestra el informe.

Fantástico!

Pero, ¿cómo puedo ordenar los informes alfabéticamente dentro de la lista?

Y ya para acabar: ¿es posible crear otra lista desplegable que muestra y ejecute alguna macros de mi base de datos?

Mil gracias por tu ayuda!

En cuanto a tu primera preguna (ordenarlos), he de decirte que con este método no encontré la forma, pues access ordena según los índices que les asigna a los informes, formularios...

Puedes hacerlo manualmente (y aprovecho para explicarte cómo hacer el cuadro combinado sin código): Vas a la pestaña Datos->Origen de la Fila, y ahí escribes los nombres de los informes separados por ; (punto y coma). La ventaja de este sistema es que los puedes ordenar a yu gusto, la desventaja es tener que modificarlo cada vez que creas un informe nuevo.
En cuanto a la segunda, sí que puedes, la idea sería la misma, pero cambiando los códigos un poquito (los marco en negrita):

Código para seleccionar las macros de la bd (cuadro combinado de nombre cboMacros):

Dim miOrigen As String
Dim miMacro As Object
'Inicializamos la variable miOrigen como una cadena vacía
miOrigen = ""
'Recorremos la colección "Macros"
For Each miMacro In CurrentProject.AllMacros
miOrigen = miOrigen & miMacro.Name & ";"
Next miMacro
'Quitamos el último ; de la lista
miOrigen = Left(miOrigen, Len(miOrigen) - 1)
With Me.cboMacros
.LimitToList = True
.RowSource = miOrigen
End With

Código para ejecutarla :

On Error GoTo sol_err
DoCmd.RunMacro Me.cboMacros.Value
cboMacros = ""
Salida:
Exit Sub
sol_err:
MsgBox Err.Description
Resume Salida

Hecho... pero aparece un mensaje de error:

"La acción o método requiere un argumento Nombre de macro"

Seguramente te da el error porque la macro tiene alguna condicion, o necesita un parametro, o hace referencia a algun objeto q no esta cargado...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas