¿Alguien ha pensado que crear un calendario en excel tenia que ser mas fácil?. Yo también. Aquí tenéis una macro de excel para crearos un calendario del mes que queráis y del año que queráis.
Para utilizar esta macro debéis ir a Herramientas / Macro /Editor de Visual Basic.
Menú Insertar / Modulo y pegar el texto siguiente.
Luego ya solo ejecutar la macro y te lo hace todo solo para el mes que le pongas, por ejemplo, si quieres para este mes has de poner en el InputBox “03/2008″ (sin comillas).
[vb]Sub Crea_Calendario()
‘ Desprotege la hoja si tienes un calendario previo para prevenir el error.
ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _
Scenarios:=False
‘Previene el parpadeo de la ventana mientras se crea el calendario.
Application.ScreenUpdating = False
‘ Control de errores.
On Error GoTo MyErrorTrap
‘ Limpia el area a1:g14 incluyendo cualquier calendario previo.
Range(“a1:g14″).Clear
‘ Usa un InputBox para pedir el mes y año deseado y ponerlo en la variable MyInput.
MyInput = InputBox(“Escribe el mes y el año para el calendario en formato 01/2008 “)
‘ Permite al usuario terminar la macro Cancelando el InputBox.
If MyInput = “” Then Exit Sub
‘ Coge el valor del día del comienzo del mes.
StartDay = DateValue(MyInput)
If Day(StartDay) <> 1 Then
StartDay = DateValue(Month(StartDay) & “/1/” & _
Year(StartDay))
End If
Range(“a1″).NumberFormat = “mmmm yyyy”
‘ Formatea el mes y el año.
With Range(“a1:g1″)
.HorizontalAlignment = xlCenterAcrossSelection
.VerticalAlignment = xlCenter
.Font.Size = 18
.Font.Bold = True
.RowHeight = 35
End With
‘ Formatea los días de la semana.
With Range(“a2:g2″)
.ColumnWidth = 18
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = xlHorizontal
.Font.Size = 12
.Font.Bold = True
.RowHeight = 20
End With
‘ Pone los días de la semana en a2:g2.
Range(“a2″) = “Lunes”
Range(“b2″) = “Martes”
Range(“c2″) = “Miercoles”
Range(“d2″) = “Jueves”
Range(“e2″) = “Viernes”
Range(“f2″) = “Sabado”
Range(“g2″) = “Domingo”
‘ Formatea las celdas a3:g7 para los días.
With Range(“a3:g8″)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlTop
.Font.Size = 18
.Font.Bold = True
.RowHeight = 21
End With
‘ Pone el mes y año indicado en la variable MyInput en “a1″.
Range(“a1″).Value = Application.Text(MyInput, “mmmm yyyy”)
‘ Pone la variable y coge el dia de la semana en el que el mes empieza.
DayofWeek = Weekday(StartDay)
‘ Separa las variables de mes y año en dos variables
CurYear = Year(StartDay)
CurMonth = Month(StartDay)
‘ Calcula el primer día del mes siguiente.
FinalDay = DateSerial(CurYear, CurMonth + 1, 1)
‘ Pone un “1″ en la celda del primer día del mes escogido
Select Case DayofWeek
Case 1
Range(“g3″).Value = 1 ‘ g3 porque empieza por domingo
Case 2
Range(“a3″).Value = 1
Case 3
Range(“b3″).Value = 1
Case 4
Range(“c3″).Value = 1
Case 5
Range(“d3″).Value = 1
Case 6
Range(“e3″).Value = 1
Case 7
Range(“f3″).Value = 1
End Select
‘ Loop para el rango a3:g8 incrementando en 1 a partir del primer “1″.
For Each cell In Range(“a3:g8″)
RowCell = cell.Row
ColCell = cell.Column
‘ Si “1″ está en la primera columna.
If cell.Column = 1 And cell.Row = 3 Then
‘ Si NO está en la primera columna.
ElseIf cell.Column <> 1 Then
If cell.Offset(0, -1).Value >= 1 Then
cell.Value = cell.Offset(0, -1).Value + 1
‘ Se detiene cuando el el último dia del mes se ha colocado.
If cell.Value > (FinalDay – StartDay) Then
cell.Value = “”
Exit For
End If
End If
‘ Solo si la actual celda no está en fila 3 y está en la columna 1.
ElseIf cell.Row > 3 And cell.Column = 1 Then
cell.Value = cell.Offset(-1, 6).Value + 1
‘ Se detiene cuando el el último dia del mes se ha colocado.
If cell.Value > (FinalDay – StartDay) Then
cell.Value = “”
Exit For
End If
End If
Next
‘ Crea las celdas de entrada de datos y las formatea.
For x = 0 To 5
Range(“A4″).Offset(x * 2, 0).EntireRow.Insert
With Range(“A4:G4″).Offset(x * 2, 0)
.RowHeight = 65
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
.WrapText = True
.Font.Size = 10
.Font.Bold = False
‘ Desbloquea estas celdas para insertar texto después porque
‘ la hoja estará protegida.
.Locked = False
End With
‘ Crea el borde alrededor de los días.
With Range(“A3″).Offset(x * 2, 0).Resize(2, _
7).Borders(xlLeft)
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Range(“A3″).Offset(x * 2, 0).Resize(2, _
7).Borders(xlRight)
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Range(“A3″).Offset(x * 2, 0).Resize(2, 7).BorderAround _
Weight:=xlThick, ColorIndex:=xlAutomatic
Next
If Range(“A13″).Value = “” Then Range(“A13″).Offset(0, 0) _
.Resize(2, 8).EntireRow.Delete
‘ Elimina las lineas del grid.
ActiveWindow.DisplayGridlines = False
‘ Protege la hoja para prevenir la sobre escritura de los días.
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True
‘ Redimensiona la ventana para ver todo el calendario.
ActiveWindow.WindowState = xlMaximized
ActiveWindow.ScrollRow = 1
‘ Permitimos a la ventana reescribirse para ver el calendario.
Application.ScreenUpdating = True
‘ Si no ha ocurrido ningún error aquí acaba la Macro
Exit Sub
‘ Si ha dado error al introducir los datos te muestra un mensaje y te
‘ muestra de nuevo el InputBox para que vuelvas a introducir la fecha.
MyErrorTrap:
MsgBox “No has introducido el mes y el año correctamente.” _
& Chr(13) & “Escribe el mes correctamente” _
& Chr(13) & “y 4 digitos para el año”
MyInput = InputBox(“Escribe el mes y el año correctamente para el calendario”)
If MyInput = “” Then Exit Sub
Resume
End Sub
[/vb]
Si hemos creado una macro en excel y la quitamos al volver a abrir el documento sigue apareciendo una molesta ventana que dice que el documento tiene macros cuando no existe ninguna macro:
Menu Herramientas, Macro, Editor Visual Basic, menú ver explorador de proyectos, botón derecho sobre cada modulo y quitar.
Si nos preguntar guardar y no lo queremos le decimos que no.
La próxima vez que abramos el documento ya no nos preguntará si queremos habilitar los macros.
Comentarios Recientes