Access - ¿Cómo puedo rellenar un subformulario desde VBA?

 
Vista:
sin imagen de perfil

¿Cómo puedo rellenar un subformulario desde VBA?

Publicado por Javier (2 intervenciones) el 28/12/2023 09:46:49
Buenos días, soy Javi,

Necesito de vuestra ayuda. He estado leyendo en foros (también le he preguntado a ChatGPT), y no he conseguido nada.

Tengo un subformulario dentro de un formulario, y necesito rellenar el subformulario desde VBA, ya que necesito algo como esto:
- Juan Perez
-1º Antonio Tal
- María Noseque
-------
- Javier Perez
-2º Antonio Martinez
- Rosa Flores

Necesito algo como que me muestre el numero de clase y el nombre de todos los alumnos de la clase. El problema es que al usar Me.nombreSubForm.Form.txtNombreCaja = DLookup(...), no me muestra los datos en la tabla.
El DLookup, me devuelve valores, por lo que el error es en la asignación.

**Lo explico con este ejemplo, ya que es más sencillo de entender que con mi propio proyecto.

Aún así, os dejo por aquí el codigo completo de VBA del formulario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Option Compare Database
 
Private Sub btnCriteriosCerrados_Click()
Me.listadoWorkOrders.Form.RecordSource = "consultaWorkOrdersCerradas"
End Sub
 
Private Sub Form_Load()
    DoCmd.Maximize
 
    Dim rs As DAO.Recordset
    Dim idCriterio As String
    Set rs = CurrentDb().OpenRecordset("SELECT idCriterio FROM criterios")
 
    Do Until rs.EOF
        idCriterio = rs!idCriterio
 
        Me.trabajosSubForm.Form.Controls("txtCodigoCriterio").Value = DLookup("[codigoCriterio]", "criterios", "[idCriterio]=" & idCriterio)
 
        Dim idEstadoCriterio As Integer
        idEstadoCriterio = DLookup("[idEstadoCriterio]", "criterios", "[idCriterio]=" & idCriterio)
        Me.trabajosSubForm.Form.Controls("txtEstado").Value = DLookup("[estado]", "estadosCriterios", "[idEstadoCriterio]=" & idEstadoCriterio)
 
        Me.trabajosSubForm.Form.Controls("txtDeadLine").Value = DLookup("[DeadLine]", "criterios", "[idCriterio]=" & idCriterio)
 
        Dim idAnalista As Integer
        idAnalista = DLookup("[analista]", "criterios", "[idCriterio]=" & idCriterio)
        Me.trabajosSubForm.Form.Controls("txtAnalista").Value = DLookup("[nombreUsuario]", "usuarios", "[idUsuario]=" & idAnalista)
 
        Dim rs1 As DAO.Recordset
        Set rs1 = CurrentDb().OpenRecordset("SELECT codigoWo FROM workOrders WHERE idCriterio = " & idCriterio)
 
        Do Until rs1.EOF
            Me.trabajosSubForm.Form.Controls("txtCodigoWo").Value = rs1!codigoWo
 
            rs1.MoveNext
        Loop
 
        rs1.Close
 
        rs.MoveNext
    Loop
 
    rs.Close
End Sub
 
Private Sub Form_Resize()
Me.Box0.Width = Me.InsideWidth
End Sub

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

¿Cómo puedo rellenar un subformulario desde VBA?

Publicado por Javier (2 intervenciones) el 28/12/2023 09:49:34
Resulta que el ejemplo que he puesto no se ha mostrado como esperaba. Os lo dejo de nuevo por aqui:
-..........| Juan Perez
-1º......|Antonio Tal
-..........|María Noseque
-------
-..........|Javier Perez
-2º.......|Antonio Martinez
-...........|Rosa Flores

Los puntos son para que no se vaya a la izquierda.

Gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo puedo rellenar un subformulario desde VBA?

Publicado por Anonimo (3316 intervenciones) el 28/12/2023 13:09:11
Lo ideal para mostrar en un formulario (o subformulario, TODOS sin excepción pueden ser 'padres o hijos' ) un conjunto de datos, es que se genere una consulta y se le asigne como origen de datos.

Si lo que se desea es generar un conjunto de datos para generar una tabla el método es diferente.

Lo que me llama la atención, es que no tengo claro a quien pertenece esta línea:

1
Private Sub Form_Load()

Si al formulario principal o al subformulario (según sea el caso funcionara o no funcionara), además estas líneas no tienen efecto practico :

1
2
3
Dim rs As DAO.Recordset
    Dim idCriterio As String
    Set rs = CurrentDb().OpenRecordset("SELECT idCriterio FROM criterios")

Las razones son:
1.- Una variable de texto nace como una cadena vacía (sin valor) por lo que asignarla como 'dato' a seleccionar en un Recordset carece de sentido.
2.- Para que la SQL que proporciona los datos a [rs] obtenga el valor de la variable es indispensable 'sacarla' de la cadena de texto (variable que en principio no tiene valor),por lo que la SQL: dará error o buscara un campo en la tabla que se llame [idcriterio] y no hay garantías de que sea el primer registro o el ultimo en ese conjunto.

Access lo puede hacer mucho mejor y muchísimo mas rápido si se crea la SQL que si se le asigna uno a uno (mediante DLookup) un valor.

-- DLookup es una automatización (una función) que abre una tabla obtiene un dato según unas condiciones y cierra esa tabla --

Para que los datos obtenidos 'pasen a una tabla' esa tabla tiene que figurar como RecordSource y los registros se han de crear como nuevos en el formulario (ir a un nuevo registro, asignarle valores y GUARDARLO) tras ello será un registro mas en la tabla, en cualquier otro caso se comportara (el formulario) como si al mismo registro se le asignan reiteradamente diferentes datos, se quedara o con el primero (o con el ultimo si se guardan los cambios del registro).

Personalmente (con el editor grafico de consultas) crearía una que relacionase todas esas tablas (mediante los correspondientes IDs) y devolviese los datos de interés, le asignaría al formulario esa consulta (o su SQL y borrarla tras copiar la SQL).

Si el formulario esta haciendo la función de subformulario, se deberá tener en cuenta que 'como objeto del formulario principal' se cargara antes de que se carguen los datos del formulario principal y se pueda interactuar con el.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo puedo rellenar un subformulario desde VBA?

Publicado por Eduardo Pérez Fernández (317 intervenciones) el 28/12/2023 15:01:30
Entiendo cuando se refiere a rellenar es que el subformulario tome la información con base en una consulta, para este caso le recomiendo utilizar una sentencia SQL, con base en ésta actualiza el origen de datos del subformulario. Si quiere envíeme su base de datos a [email protected] y trato de colaborarle, favor en el asunto hacer referencia a su consulta.

Si lo prefiere lo invito a ver este video de Búsquedas y filtros Avanzados

https://www.youtube.com/watch?v=Bwg4KlJEkX4&ab_channel=EduardoP%C3%A9rezFern%C3%A1ndez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar