** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - saber el último día laborable del mes
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradosaber el último día laborable del mes

 Responder Responder
Autor
Mensaje
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Tema: saber el último día laborable del mes
    Enviado: 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


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Enviado: 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.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 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


Editado por lbauluz - 07/Abril/2021 a las 16:22
El Búho es un pajarraco
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Enviado: 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


Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 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




Editado por xavi - 07/Abril/2021 a las 18:09
Xavi, un minyó de Terrassa

Mi web
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Enviado: 07/Abril/2021 a las 20:08
Perfecto, solucionado.

Gràcies!!! Clap
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable