Como rellenar un subformulario a partir del valor de un campo del formulario

Tengo un formulario que depende de una tabla que se llama identificador en donde hay un campo que se llama ID_SEM en ese campo selecciono la clave de la semana que se va a llenar en el subformulario, por ejemplo semana 01/2019 la fecha de inicio seria del 31/12/2018 y la fecha de termino del 06/01/2019 (estos valores los tengo en otra tabla que se llama semanas), en el subformulario deben de aparecer todas las fechas del 31/12/2018 al 06/01/2019 (los 7 días), como le hago

1 respuesta

Respuesta
1

Te digo lo que haría. Supongamos que tengo una tabla Semanas como en la imagen

Donde le he añadido un campo Inicio(fecha corta) para indicarle que día empieza la semana. Por otro lado tengo el formulario Semanas basado en esa tabla donde le he puesto un botón de comando

Al apretar el botón

Por el tamaño de la imagen no me caben más pero llega hasta fin de año.

El código del botón es

Private Sub Comando5_Click()
DoCmd.SetWarnings False
Inicio = #12/31/2018#
Semana = Format(DateAdd("w", 1, Inicio), "ww/yyyy")
DoCmd.GoToRecord , , acNext
Dim i As Byte
For i = 1 To 52
Inicio = DateAdd("d", 7, DLast("inicio", "semanas"))
Semana = Format(DateAdd("w", 1, Inicio), "ww/yyyy")
DoCmd.GoToRecord , , acNext
Next
End Sub

Por otro lado tengo otra tabla Tabla1(que sería esa que mencionas como origen del subformulario)

O bien en el mismo formulario de Semanas o bien en otro formulario, en este caso he puesto otro formulario

donde hay un combinado con origen de la fila

SELECT Inicio, Semana FROM Semanas GROUP BY Inicio, Semana;Y en formato-numero de columnas le pongo 2 y en Ancho de las columnas le pongo

0;4

Una vez que elijo una semana( en el ejemplo elijo) la primera, me deja la tabla como

Si luego elijo la segunda

En el caso de que eligieras una semana que ya está "guardada" en la tabla 1 te saldría un mensaje avisándote de eso y no te deja seguir hasta que no cambies la semana que elegiste. El código del evento Después de actualizar del combinado(al que he llamado Semana) es

Private Sub Semana_Click()
If DCount("*", "tabla1", "fechas=#" & Me.Semana & "#") >= 1 Then
MsgBox "Esas fechas ya están puesta en la tabla", vbOKOnly, "Tendrás que elegir otra"
DoCmd.CancelEvent
ElseIf Nz(DCount("*", "tabla1", "fechas=#" & Me.Semana & "#")) = 0 Then
Dim i As Byte
For i = 1 To 7
DoCmd.RunSQL "insert into tabla1(fechas)values(DateAdd(""d"", " & i & "-1, Semana))"
Next
End If
End Sub

Si en el formulario tuvieras un subformulario sólo tendrías que añadirle, entre Nex y End if

me!nombredelsubformulario.form.requery

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas