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