Imprimir página | Cerrar ventana

saber el último día laborable del mes

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85938
Fecha de impresión: 23/Abril/2021 a las 06:42


Tema: saber el último día laborable del mes
Publicado por: joanka
Asunto: saber el último día laborable del mes
Fecha de publicación: 07/Abril/2021 a las 12:09
Hola a todos,

He buscado pero exactamente no encuentro el modo de saber el último día laborable del mes. tengo este código que me dice el último día.

Dim ultim As Date

Me.fecha = Date
ultim = DateSerial(Year(fecha), month(fecha) + 1, 0)
    
Me.last = ultim

A ver si alguien me puede ayudar, gracias!!!Tongue





Respuestas:
Publicado por: Mihura
Fecha de publicación: 07/Abril/2021 a las 13:06
Hola, bienvenido.

Ese es el primer paso. Los pasos a dar para encontrar el último día laborable del mes son:
1- encontrar el último día del mes
2- comprobar si el día es laborable, si no lo es retroceder un día y volver a comprobar

Para comprobar si un día es laborable usa la función Weekday.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: joanka
Fecha de publicación: 07/Abril/2021 a las 13:14
Hola,

Gracias por contestar. He probado con weekday con la información que he buscado, pero no lo sé implementar en el código.

Gracias.


Publicado por: Mihura
Fecha de publicación: 07/Abril/2021 a las 13:46
¿Y qué has probado? ... 

No tiene mucho misterio:
Weekday(Fecha) te devuelve un número del 1 al 7 que te dice si es lunes, martes ....



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: lbauluz
Fecha de publicación: 07/Abril/2021 a las 16:20
Como lo tienes casi hecho, te lo pongo... pero que no se haga costumbre :)


Sub Laborable()
    Dim dtHoy As Date
    Dim dtUltDia As Date
    
    dtHoy = Date                                            ' Hoy
    dtUltDia = DateSerial(Year(dtHoy), Month(dtHoy) + 1, 0) ' Último día del mes
    If Weekday(dtUltDia, vbMonday) > 5 Then
        MsgBox "Finde"
    Else
       MsgBox "Laborable"
    End If
End Sub


Luis

Edito: OJO, en esa función solo se mira si es de  lunes a viernes o no, en ningún caso se evalúan festivos


-------------
El Búho es un pajarraco


Publicado por: joanka
Fecha de publicación: 07/Abril/2021 a las 17:16
Hola,

Gracias por reponder.

Ya lo había probado, lo que en la ayuda de microsoft no había visto lo de ">5", igualmente no me da el resutado deseado.

El resultado que quiero que me de en me.last es la fecha. Me da como resultado una fecha no coincidente. Por ejemplo en febrero, el último día laborable de los 28 sería el 26, necesitaría que me.last = 26/02/2021

Dim ultim As Date

Me.fecha = Date
ultim = Weekday(DateSerial(Year(fecha), month(fecha) + 1, 0), vbMonday) > 5
     
Me.last = ultim




Publicado por: xavi
Fecha de publicación: 07/Abril/2021 a las 18:09
Hola,

Jesus te ha indicado el camino a seguir: localizar el último día del mes y localizar el anterior hábil.

Yo tengo una función que devuelve el anterior hábil a una fecha dada y que permite discriminar si los sábados son laborables o no

 
Public Function DameAnteriorHabil(dtmReferencia As Date, Optional blnSabadoEsHabil As Boolean = False) As Date
    Do
        dtmReferencia = DateAdd("d", -1, dtmReferencia)
        Select Case Weekday(dtmReferencia, vbMonday)
            Case 1 To 5
                DameAnteriorHabil = dtmReferencia
                Exit Function
            Case 6
                If blnSabadoEsHabil Then
                    DameAnteriorHabil = dtmReferencia
                    Exit Function
                End If
            Case Else
        End Select
    Loop
End Function

Esa función esperaría el primer día del mes y buscaría el anterior hábil.

Me!Ultimo = DameAnteriorHabil("01/03/2021", False)

Esa línea devuelve 26/02/2021.

También puedes pasar el argumento fecha como un cálculo para, en base a la fecha actual, calcular el último hábil del mes en curso:

Me!Ultimo = DameAnteriorHabil(DateSerial(Year(Date), Month(Date)+1, 1), False)

Esa línea devuelve hoy, 30/04/2021

Un saludo




-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: joanka
Fecha de publicación: 07/Abril/2021 a las 20:08
Perfecto, solucionado.

Gràcies!!! Clap



Imprimir página | Cerrar ventana