Hola Carnero, esto podría ser una idea (mejorable por supuesto) si te convence.
Necesitas tan sólo un MsFlexGrid llamado Grid o cambia el nombre donde te convenga, por lo demás creo que el código es suficientemente explicativo con los comentarios que le pongo.
Código vb:
Ver originalOption Explicit
Private Sub Form_Load()
' Dimensionamos el Grid/Calendario
Dim Dia As Integer
Grid.Cols = 32 ' Porque el mayor día del mes es 31
Grid.Rows = 1 ' Dejamos sólo la linea de Cabeceras
Grid.ColWidth(0) = 800 ' Ancho de la Columna 0 yyyy/mm
For Dia = 1 To 31 ' Ponemos número de día como título
Grid.TextMatrix(0, Dia) = Dia
Grid.ColWidth(Dia) = Grid.RowHeight(0)
Next
End Sub
Private Sub CargarCalendario()
' Funcion que carga las fechas en el Grid/Calendario
' Evidentemente esta función debes codificarla según tus ficheros
Dim Registro As Single
Grid.Redraw = False ' Evitamos el parpadeo del Grid
Do
' Las siguientes lineas están como comentarios porque dependen del aplicativo
' Registro = Registro + 1
' FicheroDIARIO Registro
' If Registro = -1 Then Exit Do
' If Not RegistroSuprimido("DIARIO") Then GridAdd CDate(FechaGMD4(RegistroDiario.Fecha))
Loop
Grid.Col = 0 ' Columna 0 yyyy/mm
Grid.Sort = 1 ' Ordenamos por Año/Mes
Grid.Redraw = True ' Redibujamos el Grid
End Sub
Private Sub GridAdd(Fecha As Date)
' Marcamos el Grid/Calendario segñun la fecha recibida
Dim Fila As Single, AñoMes As String, Dia As Integer
AñoMes = Format(Fecha, " yyyy/mm") ' Ponemos un espacio en blanco delante centrar y forzar alfanumérico
Dia = Day(Fecha)
For Fila = 1 To Grid.Rows - 1
' Si Año/Mes está ya creado, salimos a PonerDia
If Grid.TextMatrix(Fila, 0) = AñoMes Then GoTo PonerDia
Next
' Si Año/Mes no es´aba, añadimos una Fila y lo ponemos ahí
Grid.Rows = Fila + 1
Grid.TextMatrix(Fila, 0) = AñoMes
PonerDia:
' Si la casilla del día no está marcada, la marcamos
If Grid.TextMatrix(Fila, Dia) = "" Then
Grid.Col = Dia
Grid.Row = Fila
Grid.CellFontName = "Wingdings 2"
Grid.CellFontSize = 12
Grid.Text = "P"
End If
End Sub
De todos modos, si te convence, cualquier duda comentas.
Posibles mejoras, que en vez de la marca de Visto, indique cuantos registros hay en cada fecha, colores segun número de registros, etc.
Saludos