Formulario que permita seleccionar solo los días lunes de un calendario. Vba excel

Quiero abrir un formulario con un calendario ya sea diseñado y a través del control DTPicker pero con la condición que solo se permita elegir los días lunes.

2 respuestas

Respuesta
1

H  o l a:

Te anexo una opción. El control DTPicker, no puede quedar vacío, por lo tanto, hay que poner una fecha correcta, en este caso, si seleccionas un jueves, por ejemplo, lo que va a hacer la macro es seleccionar el lunes inmediato anterior, te presenta un mensaje y después de que aceptes el mensaje aparecerá en el DTPicker la fecha de un lunes.

Prueba y me comentas

Private Sub DTPicker1_Change()
'Por.Dante Amor
    dia = Format(DTPicker1, "dddd")
    fecha = DTPicker1
    If LCase(dia) <> "lunes" Then
        MsgBox "Solamente se puede seleccionar el lunes"
        Do While True
            fecha = fecha - 1
            dia = Format(fecha, "dddd")
            If LCase(dia) = "lunes" Then
                DTPicker1 = fecha
                Exit Do
            End If
        Loop
    End If
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias!

Es lo que buscaba. Aunque al cambiar de meses o año según los botones del DTpicker me muestra la advertencia de "Solamente se puede elegir el lunes". Al parecer detecta cualquier clic dentro del DTpicker como una selección. ¿Se podría ignorar en estos casos?. Por lo demás si funciona el código.


                    
Respuesta

Yo no tengo este control en mi excel pero en visual basic net se usa el evento validating con el siguiente código.

Private Sub Dtp_dia_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Dtp_dia.Validating
Dim _date As DateTime = Dtp_dia.Value.Date

If _date.DayOfWeek = DayOfWeek.Monday Then
Else
e.Cancel = False
End If

End Sub

Checa si en vba funciona igual

Perdón el código seria así:

Private Sub Dtp_dia_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Dtp_dia.Validating

Dim _date As DateTime = Dtp_dia.Value.Date

If _date.DayOfWeek = DayOfWeek.Monday Then

Else
MsgBox("Este dia no es valido")
e.Cancel = True
End If

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas