Saltar al contenido

3 imágenes

Sobre el aporte

La contraseña del proyecto VBA es "riddle"

Hola, el día de hoy voy a compartir una alternativa al control dtpicker, que seria básicamente un calendario que se instala como complemento y puede ser utilizado en cualquier formulario VBA.

Los pasos serian los siguientes:

1. Descargar el complemento, es preferible que lo guardes en la carpeta por defecto para complementos de excel la cual suele estar aqui: "C:\Users\NOMBRE USUARIO\AppData\Roaming\Microsoft\Complementos", o simplemente lo guardan donde deseen.

2.Instalamos el complemento Guía para instalar complementos

3.Vamos a abrir el archivo excel donde queremos que el calendario aparezca  y nos dirigiremos a la Ventana de VBA (Alt + F11), iremos a Herramientas -> Referencias, y activaremos la que dice CalendarioRiddle.

reg.gif.thumb.gif.e7aa582f694f6619d789f993be873689.gif

4.El calendario esta listo para ser usado, solo debemos ligarlo a un textbox, para esto crearemos un botón junto al textbox y agregaremos el siguiente código el el evento click() del CommandButton:

Private Sub CommandButton1_Click()
CalendarioR TextBox1
End Sub

Se debe colocar la palabra "CalendarioR" seguido del nombre del textbox que guardara la fecha.

El calendario por defecto empieza la semana el día Domingo, podemos cambiar esto agregando un 2 como segunda variable para que empiece por el día Lunes:

Private Sub CommandButton1_Click()
CalendarioR TextBox1, 2
End Sub

También es posible cambiar el color del calendario (por defecto es negro) agregando como tercera variable el color deseado, por ejemplo morado:

Private Sub CommandButton1_Click()
CalendarioR TextBox1, 2, &H400040
End Sub

 Quedaría así:

ejemplo.gif.24e56d383d1121f8a9da2c0406f09293.gif

Para cambiar de mes dan click sobre el mes actual y seleccionan el mes deseado, para volver al día actual click sobre la leyenda del día de hoy.

Pueden salir del calendario con la tecla "ESC" del teclado.

Saludos y espero que sea de utilidad.


What's New in Version 2.0.0   See changelog

Released

Se arreglo el error que marcaba el número de día del mes anterior o siguiente si era igual al número de día actual.


Comentarios de los usuarios

Recommended Comments

Haplox

publicado

Excelente aporte @Riddle :lol:

Aparte me viene genial para mi excel 2013 x64 de casa ;)

aaquino

publicado

Muy buen aporte, más para los que tenemos Office de 64 bits, y que a Microsoft se le ha olvidado que también necesitan de este tipo de complementos.

Nicomem14

publicado

Buenas Tardes, Creo que estoy haciendo algo mal, pero no se exactamente el que... a ver si me podéis ayudar porque cuando selecciono el Botón una vez ejecutado el formulario me dice que hay un error de compilación: "No se ha definido Sub o Function". 

 

Saludos y Gracias de Antemano.

3abd639efc64a975d8ed27c51f3188d6.png

AlexanderS

publicado

Hace 16 horas, Nicomem14 dijo:

Buenas Tardes, Creo que estoy haciendo algo mal, pero no se exactamente el que... a ver si me podéis ayudar porque cuando selecciono el Botón una vez ejecutado el formulario me dice que hay un error de compilación: "No se ha definido Sub o Function". 

Hola @Nicomem14, debes asegurarte de tener activo el complemento y agregarlo a las referencias desde la ventana de VBA.

Saludos.

AlexanderS

publicado

Corregido el error que marcaba el número de día del mes anterior o siguiente si era igual al número de día actual, gracias @aaquino por avisar.

Saludos.

aaquino

publicado

Mi estimado @Riddle

Solo para comentarte, revisando nuevamente el proyecto, tiene otro pequeño fallo, es mínimo, el inconveniente está en la generación de la primer línea de labels, donde se colocan los días de la semana, pues comienza a nombrar desde el día sábado, por si lo pudieras revisar. Aclaro que coloca bien las fechas, el inconveniente está en los títulos de los días que los comienza por sábado y no por domingo como debiera comenzar.

aaquino

publicado

Para aclarar, ya lo resolví, pero se debe implementar en el proyecto compartido por el buen @Riddle

El inconveniente está en la macro para crear el calendario:

Sub Crea_calendario(): On Error Resume Next

    primerdia = DateSerial(Calendario.AÑO, M, 1)
    primerdia = primerdia - Weekday(primerdia, P_dia)
    
    For Each cl In Calendario.Frame1.Controls: Controls.Remove cl.Name: Next
    
    For h = 1 To 7
        For v = 1 To 7
            dia = dia + 1
            Set c = Calendario.Frame1.Controls.Add("Forms.label.1", "Boton_" & dia)
            With c
                If h = 1 Then
               .Caption = UCase(Application.Text((dia + (P_dia - 1)), "[$-0C0A]ddd")) 'Es en esta línea, se debe eliminar el "-1"
               .Font.Bold = True
                Else
                If Not Month(primerdia + (dia - 7)) = Month(DateSerial(Calendario.AÑO, M, 1)) Then .ForeColor = &H988F8F: .FontItalic = True

                .Caption = Day(primerdia + (dia - 7))
                .ControlTipText = primerdia + (dia - 7)
                 If CDate(.ControlTipText) = CDate(Date) Then .BorderStyle = 1: .BackColor = &HE0E0E0
                 
                 If .ForeColor = vbBlack Then _
                 If CDate(.ControlTipText) = CDate(fecha) Then .BorderStyle = 1
             
                End If
                .Height = 17
                .Width = 20
                .Top = .Height * h
                .Left = .Width * v
                .TextAlign = 2
            End With
        Next v
    Next h
    Calendario.LFecha = UCase(Format(DateSerial(1900, M, 1), "MMMM"))
    Meses
    eventos
End Sub

 

itzy alonso

publicado

excelente aporte gracias por compartir desde ahora usare calendario riddle

digitalboy

publicado

Hola @AlexanderS

Excelente aporte e idea! Los únicos inconvenientes que le veo es que de entrada este protegido el proyecto, se ve genial el diseño y funcionalidad pero si quisiera personalizarlo, revisar el código o hacer algún cambio, como si esta protegido?. También al tenerlo como un complemento y crear desarrollos haces dependientes a los usuarios de tener que estar llevando el complemento de calendario a cada equipo.

Si te reservas el derecho de compartir el código es entendible, buscare si hay modo de acceder al código, me parece que ya @aaquino lo logro.

Para este caso de desarrollo creo que seria mejor que subieras tu código a gitgub y así cualquiera pudiera modificarlo y mejorarlo. Eso es mucho de lo que le falta a VBA para no estar estancado frente otro lenguajes modernos.

Por ultimo gracias por compartir y Saludos!

Conéctate para comentar

Podrás dejar un comentario después de conectarte



Conéctate ahora
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.