Ayuda con macro calendario

Hola, tenia una duda con macros de excel, quiero utilizar el calendario, ya
lo he insertado y funciona bien.
Básicamente tengo una hoja en excel donde ciertos días agrego una fila con
su fecha y demás datos, quiero mostrar dichos datos utilizando el calendario que
ya trae excel, pero ahi aparecen todos los días del mes y yo solo tengo datos
en algunos de esos días entonces se me ocurrió bloquear los días que no tienen
datos y que unicamente podas hacer click en los que si tienen datos, no he
encontrado como hacerlo pero luego vi que existe un método que se llama
getdaybold donde lo que si podes hacer es hacer en negrita ciertos días del mes,
es utilizado por ejemplo para señalar días festivos pero no he encontrado como
usarlo, por lo que agradecería tu ayuda.
gracias

1 respuesta

Respuesta
1

Debes usar el control Monthview, no utilices el control Calendar.

Aquí un ejemplo para poner todos los domingos en negrita, los días puestos en negrita solo se muestran para el mes que es activo, si pones en negrita de otros meses no te aparecerán, en este ejemplo ya esta resuelto ese problema con el evento getdaybold.

Formatting Specific Days
Any day number on the MonthView control can also have its font set to bold. This capability can be used to draw attention to dates (i.e. Holidays, vacations, etc.) or just distinguish them from ordinary dates. More than one date can be bolded at the same time. Although the bold information for a day is not preserved while scrolling from month to month, this behavior can be simulated using the GetDayBold event.
The following example makes all Sundays bold, even when new months are scrolled into view:
Private Sub MonthView1_GetDayBold(ByVal StartDate As Date, ByVal Count As Integer, State() As Boolean)
 Dim i As Integer
 i = vbSunday
 While i < Count
 State(i - MonthView1.StartOfWeek) = True
 i = i + 7
 Wend
End Sub

Lo he probado y no me funciono, habrá que activar otra cosa ?

encima te quisiera pedir dos cosas

1) Si me podes explicar la macro pues no se que es count por ejemplo

2) Si yo tuviera en una columna las fechas de días que quiero que aparezcan en negrita, como le digo que los busque en la celda y los pinte

Lo primero que tienes que tener claro es que GetDayBold es un evento, que se dispara cuando se dibuja el mes en el calendario. Las variables que pasa el evento son:

Startdate: es la primera fecha que aparece en ese mes (que no siempre es el dia 1 de ese mes, pues si el dia 1 empieza en jueves, por ejemplo, también aparecen los días finales del mes pasado en gris. Y lo mismo al final del mes, que puede aparecer algún dia en gris del mes siguiente.

Count: Devuelve el numero de días que aparecen dibujados en la hoja del mes, que como te he dicho antes, también cuenta los días grises del mes anterior o posterior.

State(): Variable booleana que devuelve o establece si el dia del calendario especificado esta o debe ponerse en negrita. Es un array, q incluye todos los días que aparecen en ese mes, de ahí la utilidad de las variables startdate y count.

Te paso un código mas sencillo de entender, para que veas el funcionamiento:

Private Sub MonthView1_GetDayBold(ByVal StartDate As Date, ByVal Count As Integer, State() As Boolean)
Dim i As Integer
For i = 1 To Count
 State(i - 1) = True
Next
End Sub

Este código recorre todos los días q aparecen en el mes activo del calendario y lo pone en negrita.

Si tienes una columna con fechas, pues deberás recorrer la columna, ya sea con un for, o con el método que prefieras y coloreando los días correspondientes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas