Un lector del blog, Luís García, tuvo a bien enviarme una macro de Excel para realizar un calendario completo del año en tres columnas y 4 filas, que ha desarrollado basándose en una funcion matricial para realizar un mes especifico realizada por Damian Silva.
Realmente me ha parecido interesante, por lo que agregándole dos cosillas sin importancia, he decidido compartirlo con todos.
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
el funcionamiento es 'sencillo', pregunta a través de un INPUTBOX la fecha desde donde queremos 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.
El resultado de ejecutar esta macro la podemos ver en la siguiente imagen:
Realmente me ha parecido interesante, por lo que agregándole dos cosillas sin importancia, he decidido compartirlo con todos.
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Sub calendario3() 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 'tomo la fecha inicial de cualquier año fecha1 = CDate(InputBox("ingrese la fecha, bajo el formato dd/mm/aaaa, Ejemplo: 01/12/2012 ")) 'con un bucle recorro todos los meses del año inicio en 0 para que tome el mes de la fecha que le_ 'anexamos al principio contador = 0 For aumento = 0 To 11 contador = contador + 1 fecha2 = DateSerial(Year(fecha1), Month(fecha1) + aumento, Day(fecha1)) ' voy aumentando un mes a la fecha inicial fecha = DateSerial(Year(fecha2), Month(fecha2), Day(fecha2)) 'para quenos quede la fecha a utilizar en la macro año = Year(fecha) ' tomo el año de la fecha mes = Month(fecha) ' tomo el mes de la fecha ' el dia inicial tomando en cuanta para mi gusto que lunes es el primer dia de la semana inicio = Weekday(DateSerial(año, mes, 1), vbSunday) fin = Day(DateSerial(año, mes + 1, 1) - 1) j = 1 ' primer dia del mes p = inicio ' de lun a vier que colocamos el valor de los dia dependiendo del mes 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
el funcionamiento es 'sencillo', pregunta a través de un INPUTBOX la fecha desde donde queremos 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.
El resultado de ejecutar esta macro la podemos ver en la siguiente imagen:
hola:
ResponderEliminarNo consigo que lo obtenido con year(fecha1) se grabe en una celda de una hoja.
Por ejemplo:
añoanterior = Year(Hoja1.Cells(1, 2))
Hoja4.Cells(1, 3) = añoanterior
Lo he probado con y sin variable auxiliar, y nada. Pero si creo un msgbox(añoanterior) se visualiza correctamente.
¿qué falta?
Muchas gracias.