En este ejemplo podemos ver de una manera fácil como se llena un MSHFlexGrid y cómo mostrar un reporte usando DataReport con los datos del registro seleccionado.
El proyecto cuenta con una base de datos MS Access con una tabla Alumnos que contiene 5 campos.

Primero se hace la conexión a la base de datos:
Dim ConexionADO As New ADODB.Connection
Sub Conectar()
ConexionADO.CursorLocation = adUseClient
ConexionADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "/BaseDatos.accdb" _
& ";Jet OLEDB:Database Password="
End Sub
Se llena el MSHFlexGrid haciendo una consulta a la tabla Alumnos:
Sub LlenarGrid()
Dim Recor As New ADODB.Recordset
Dim SQL As String
SQL = "Select * from Alumnos order by nombre_apellidos_al ASC"
Set Recor = ConexionADO.Execute(SQL)
numcolumnas = 6
With MSHFlexGrid1
.Cols = numcolumnas ' Numero de columnas que contendra el grid
'titulos de las columnas
.TextMatrix(0, 1) = "Codigo"
.TextMatrix(0, 2) = "Nombre"
.TextMatrix(0, 3) = "Identificacion"
.TextMatrix(0, 4) = "Teléfono"
.TextMatrix(0, 5) = "Dirección"
'anchos de las columnas
.ColWidth(0) = 0
.ColWidth(1) = 900
.ColWidth(2) = 3000
.ColWidth(3) = 1500
.ColWidth(4) = 1500
.ColWidth(5) = 2500
.DataMember = Recor.DataMember
Set .DataSource = Recor.DataSource
numfilas = Recor.RecordCount
' se va a cambiar el color de fondo de las filas pares
For fil = 1 To numfilas
.Row = fil 'seleccionamos la fia
If fil Mod 2 = 0 Then 'si es un numero par
For Colum = 1 To numcolumnas - 1 'recorremos las columnas
.Col = Colum
.CellBackColor = &HFEEEDD 'se cambia el color de la celda
Next Colum
End If
Next fil
End With
End Sub
Se llama desde el evento Load del Formulario, se llama al procedimiento de Conectar y el de LlenarGrid
Private Sub Form_Load()
Call Conectar
Call LlenarGrid
End Sub
Para hacer el Reporte se Crear un nuevo reporte usando DataReport y se personaliza: Hay que tener en cuenta la propiedad DataFiel de los rptTextBox aqui se debo colocar el nombre del campo de la tabla que se desea mostrar.

El código para mostrar el Reporte de Alumno seleccionado en el Grid es el siguiente:
Private Sub cmdReporte_Click()
Dim Recor As New ADODB.Recordset
Dim SQL As String
Codigoalumno = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1) 'codiog del alumno seleccionado
If Codigoalumno <> "" Then ' si el codigo no esta vacio
SQL = "Select * from Alumnos Where codigo_al = " & Codigoalumno 'se consultado el codigo del alumno seleccionado
Set Recor = ConexionADO.Execute(SQL)
DataReport1.DataMember = Recor.DataMember
Set DataReport1.DataSource = Recor.DataSource
DataReport1.Show ' se muestra el reporte
Else
MsgBox "Debe seleccionar un alumno", vbExclamation, "Error"
End If
End Sub
Código del Proyecto: Descargar

