Un calendario es una cuenta sistematizada del transcurso del tiempo, utilizado para la organización cronológica de las actividades humanas.
El funcionamiento de este calendario es sencillo, pregunta a través de un INPUTBOX la fecha desde donde queremos que comience el calendario, y tras todo el proceso de cálculo, traslada a la Hoja de Excel, a partir de la celda B4, la cabecera de mes y día de la semana, y los días del mes correspondientes.
Pasos a seguir para crear un calendario en Excel con VBA.
En la hoja de cálculo de Excel, se insertan los comandos de los controlex activex, como se muestran en la siguiente imagen.
(Para mayor visualización de la imagen, hacer click en la misma)
En el botón de “GENERAR CALENDARIO”, se programa el siguiente código, que nos permitirá generar un calendario anual.
Private Sub CommandButton1_Click()
Dim i As Integer
Dim fecha As Date
Dim aumento As Integer
Dim s As Integer
Dim contador
Range("B4").Select
Application.ScreenUpdating = False
s = 1
fecha1 = CDate(InputBox("INGRESE FECHA, CON EL FORMATO dd/mm/aaaa, Ejemplo: 01/01/2013 "))
contador = 0
For aumento = 0 To 11
contador = contador + 1
fecha2 = DateSerial(Year(fecha1), Month(fecha1) + aumento, Day(fecha1))
fecha = DateSerial(Year(fecha2), Month(fecha2), Day(fecha2))
año = Year(fecha)
mes = Month(fecha)
inicio = Weekday(DateSerial(año, mes, 1), vbSunday)
fin = Day(DateSerial(año, mes + 1, 1) - 1)
j = 1
p = inicio
For x = 1 To fin
ActiveCell.Offset(j - 1, p - 1) = x
ActiveCell.Offset(-2, 0).Value = DateSerial(año, mes, 1)
ActiveCell.Offset(-2, 0).NumberFormat = "mmmm-yyyy"
ActiveCell.Offset(-2, 0).Interior.ColorIndex = Int(Rnd * 55) + 1
ActiveCell.Offset(-1, 0).Value = "Do"
ActiveCell.Offset(-1, 1).Value = "Lu"
ActiveCell.Offset(-1, 2).Value = "Ma"
ActiveCell.Offset(-1, 3).Value = "Mi"
ActiveCell.Offset(-1, 4).Value = "Ju"
ActiveCell.Offset(-1, 5).Value = "Vi"
ActiveCell.Offset(-1, 6).Value = "Sá"
If p = 7 Then
p = 0
j = j + 1
End If
p = p + 1
Next
ActiveCell.Offset(0, 9).Select
If contador = 3 Or contador = 6 Or contador = 9 Or contador = 12 Then
ActiveCell.Offset(9, -27).Select
End If
Next
Application.ScreenUpdating = True
End Sub
Al hacer click izquierdo en el Boton mencionado nos muestra una venta en el que digitaremos la fecha con el siguiente formato dd/mm/aaaa y luego pulsamos en aceptar para que nos genere el calendario.
(Para mayor visualización de la imagen, hacer click en la misma)
El botón “Borrar Todo” : sirve para limpiar la hoja de cálculo y poder generar un nuevo calendario. En este botón se programa lo siguiente.
Private Sub CommandButton2_Click()
Cells.Select
Selection.ClearContents
Range("A1").Select
End Sub
El botón “CAMBIAR FUENTE” : nos permite cambiar el tipo de letra y el color del calendario. En este botón se programa lo siguiente.
Private Sub CommandButton3_Click()
Range("b2:z35").Select
With Selection.Font
.Name = "Forte"
.FontStyle = "Italic"
.Size = 14
.ColorIndex = 54
End With
End Sub
El botón “MARCAR - DOMINGOS” : nos permite marcar los domingos con el color característico que lo representa en los calendarios que es el color rojo. En este botón se programa lo siguiente.
Private Sub CommandButton4_Click()
Range("b4:b8").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("b13:b17").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("b22:b26").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("b31:b35").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("k4:k8").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("k13:k17").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("k22:k26").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("k31:k35").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("t4:t8").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("t13:t17").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("t22:t26").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("t31:t35").Select
Selection.Font.Bold = True
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Range("A1").Select
End Sub.
(Para mayor visualización de la imagen, hacer click en la misma)
Elaborado por: Ricardo Najarro Chuchón
29/07/2014 a las 12:44 pm
Buenas tardes:
Este calendario es muy bueno y práctico, lo que si me gustaría es personalizarlo a un grupo determinado de personas de una empresa , es decir que por cada persona me genere un calendario y tener así un control y una programación de vacaciones durante el resto del año y el próximo.
Muchas gracias!