Jump to content

Calendario VBA para formularios (alternativa control dtpicker) 2.0.0

   (0 reviews)

3 Screenshots

About This File

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.


User Feedback

Recommended Comments

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

Privacy Policy