Ahora entiendo perfectamente a lo que te referís, que en la tabla aparezca tal cual los días como en el calendario. Ésto resulta bastante complejo pero no imposible, ya que habría que crear las tablas de cada mes del año en cuestión por separado para que los días coincidan, es decir los campos de la tabla . ( no creo que sea lo más recomendable )
La manera facil: en cuanto a saber que día de la semana es para una fecha especificada existe una función Weekday(mifecha, vbMonday) para hoy que es martes daría un numero 2, ayer seria 1, primer día de la semana (lunes) en base a eso te dejo una función que te daría la letra de cada día que vos pones en las etiquetas, solo que ahora tienes que reemplazarlas por cuadros de texto para usar esta función:que te conviene poner en un modulo para llamarla desde cualquier parte de la aplicación
Public Function diaSemana(fecha As Date) As String
Select Case Weekday(fecha, vbMonday)
Case 1: diaSemana = "L"
Case 2: diaSemana = "M"
Case 3: diaSemana = "Mi"
Case 4: diaSemana = "J"
Case 5: diaSemana = "V"
Case 6: diaSemana = "S"
Case 7: diaSemana = "D"
End Select
End Function
Como te dije anteriormente la tabla debe estar dividida como en el ejemplo que te envíe, o sea personal ( sus datos ) y tabla horas donde hay un campo mes y año,
Relacionadas por el id de personal, los días van a ser del 1 al 31 para todos los meses pero tenemos otra función que nos puede indicar cual es el primer y el ultimo día de una fecha especifica aquí esta
Public Function PrimerUltimoDia(fecha As Date, PrioUlt As Integer) As Integer
' primer dia del mes usamos 1 para prioult , para ultimo dia del mes usamos 2
Select Case PrioUlt
Case 1: PrimerUltimoDia = Day(DateSerial(Year(fecha), Month(fecha) + 0, 1))
Case 2: PrimerUltimoDia = Day(DateSerial(Year(fecha), Month(fecha) + 1, 0))
End Select
End Function
En base a esta función podes saber si por el día 31 es del mes o no, entonces ocultar el campo en un formulario para no rellenarlo, con la propiedad visible a false, lo mismo para informes . Para rellenar los valores de los campos de la tabla horas usa un subformulario y usa la función para saber si el día existe o no para ese mes y ocultar el cuadro de texto de ese día .
La forma difícil : crear una tabla como la del ejemplo de horas por persona que te envíe pero crearla con código para solamente crear los días justos de ese mes de ese año esto es solo un ejemplo de como crear la tabla con código
Private Function Crear_Tabla_Dao(ByVal TableName As String) As Boolean 'DatabaseName As String
On Error GoTo errSub
' -- Variables para la base de datos, la tabla y el campo de tipo DAO
Dim db As DAO.Database
Dim Tabla As DAO.TableDef
Dim Campo As DAO.Field
' -- Abrir la base de datos
Set db = CurrentDb ' Workspaces(0).OpenDatabase(DatabaseName)
' -- Antes de crear la Tabla Comprobar que no exista
' -- Crear un objeto Tabla para poder hacer referencia al mismo _
' -- y agregarla a la base y también añadir 2 campos
Set Tabla = db.CreateTableDef(TableName)
' -- Crear un campo de tipo Long autonumérico llamado ID EMPLEADO
Set Campo = Tabla.CreateField("ID EMPLEADO", dbLong)
' -- Atributo de autonumérico
Campo.Attributes = DB_LONG
' -- Agregar el campo con el método Append
Tabla.Fields.Append Campo
' -- Crear un campo de tipo Long autonumérico llamado ID EMPLEADO
Set Campo = Tabla.CreateField("Nombre EMPLEADO", dbText)
' -- Agrega el campo con el método Append
Tabla.Fields.Append Campo
' -- Agregar la Tabla con el método Append
db.TableDefs.Append Tabla
' -- Cerrar la base de datos
db.Close
' -- Retornar si no hubo error
Crear_Tabla_Dao = True
Exit Function
' -- Rutina de Error
errSub:
If Not db Is Nothing Then db.Close
Set Tabla = Nothing
Set Campo = Nothing
If Err.Number Then
MsgBox Err.Description, vbInformation, " Error al crear la tabla "
End If
End Function
Dentro de esta función deberías usar un bucle for para poder generar los campos de los días del mes en conjunto con la función anterior que te da desde que día hasta que día final del mes debes crear los campos