Fechas de vencimiento sin sábados ni domingos

A _salva un cordial saludo, estoy realizando una base de datos en access la cual a partir de una fecha cita se genera una fecha de vencimiento para ello tengo que pasar los días sábados y domingos a lunes... Encontré un código en un libro de access 2000 es un ejercicio de repaso pero no se si me sirva y pueda adaptarlo a la base o también me puedas dar otra opción para realizar esta base.

1 respuesta

Respuesta
1

Supongo que estará bien ya que está en un libro, pero ponla en una respuesta y la reviso.

Básicamente lo que has de hacer es sacar el día de la semana (con la función WeekDay), y si es sábado sumarle 2 a la fecha (con la función DateAdd) o sumarle 1 si es domingo.

Hola a_salva, este es el código, utiliza en una parte la función que mencionas (weekday) y la otra Dateadd no, me explicarías el código porque soy principiante en visual basic, aquí esta el código:

Function Fecha_Vencimiento(ByVal cualquierfecha As Variant) As Variant
Dim resultado
If IsDate(cualquierfecha) Then
resultado = DateSerial(Year(cualquierfecha), _
Month(cualquierfecha) + 1, 1)
If weekday(resultado) = 1 Then
Fecha_Vencimiento = resultado + 1
ElseIf Weekday(resultado) = 7 Then
Fecha_Vencimiento = resultado + 2
Else: Fecha_Vencimiento = resultado
End If
Else
Fecha_Vencimiento = Null
End If
End Function

Los campos que yo utilizo en la base son vencimiento y fecha_cita en la tabla citas 2014.

Gracias!

No se si es lo que pretendes, pero lo que hace la función es sacar el primer día del mes siguiente, y si es sábado o domingo, pasarlo al lunes siguiente.

Por lo demás, funciona bien.

Esta otra es similar, pero se ejecuta un poco más rápido:

Function Fecha_Vencimiento(ByVal cualquierfecha As Variant) As Variant
Dim resultado
If IsDate(cualquierfecha) Then
resultado = DateSerial(Year(cualquierfecha), _
Month(cualquierfecha) + 1, 1)
Select Case Weekday(resultado)
Case 1
resultado = resultado + 1
Case 7
resultado = resultado + 2
End Select
Fecha_Vencimiento = resultado
Else
Fecha_Vencimiento = Null
End If
End Function

Hola.

De hecho no solo lo tome como referencia para eliminar los sábados y domingos para devolverme la fecha en lunes, es que en la BD de acuerdo a una fecha cita necesito calcular la fecha de vencimiento a partir de dos meses, regresándome puros días hábiles en la fecha vencimiento.

Esto es distinto a lo que preguntabas inicialmente, que era saber si una función de un libro te podía servir o no.

Si lo que quieres es calcular una fecha futura, puedes utilizar la función DateAdd.

Si quieres sumar 2 meses a la fecha, tendrías que usar lo siguiente:

resultado = Dateadd("m",2,Cualquierfecha)

Hola entonces donde esta la parte de resultado=dateserial....hasta +1,1) ...lo cambiaria por resultado=dateadd...?

Y otra duda seria llamarlo al campo vencimiento de la tabla cita seria en un sub o se puede hacer ahi mismo? Saludos!

Es correcto, sustituyes la línea con Dateserial por la del DateAdd.

Como es una función, puedes usarlo desde cualquier sitio (menos desde una tabla).

Una forma de usarlo sería:

Nombre del TextBox = Fecha_Vencimiento (Nombre del campo Origen)

Hola.

Entonces no podría jalar este calculo del vencimiento a mi campo vencimiento sino en un formulario?...Y podría sustituir la parte del código donde dice cualquierfecha por el nombre del campo: fechacita? (Del cual se debe hacer el calculo del vencimiento)

El cálculo lo puedes usar en cualquier sitio, formularios, consultas, informes, módulos... el único sitio donde no se pueden utilizar funciones es en tablas.

Para usarlo en el formulario, tienes que poner en el origen del control vencimiento la llamada a la función; = Fecha_Vencimiento(fechacita).

hola.

Tengo un problema con el código, no corre, me podrias decir cual es el problema:

Function
Fecha_Vencimiento(ByVal fecha_cita As Variant) As Variant
Dim resultado
If IsDate(fecha_cita) Then
resultado = DateAdd("m",2, fecha_cita)
If Weekday(resultado) = 1 Then
Fecha_Vencimiento = resultado + 1
ElseIf Weekday(resultado) = 7 Then
Fecha_Vencimiento= resultado + 2
Else: Fecha_Vencimiento = resultado
End If
Else
Fecha_Vencimiento = Null
End If
End Function

Gracias!

Lo que pasa es que estás usando una función con una variable que corresponde a un campo, por lo que Access no ejecuta la función.

Tienes que ponerlo como te dije. Una función es un fragmento de código que devuelve un valor.

Es como una cazuela, le metes los ingredientes y sacas una comida. Luego la sirves en un plato.

Pero no puedes meter el plato en la cazuela.

Te convendría que estudiaras fundamentos de programación, creo que no tienes muy claro lo que es una función ni un procedimiento ni cómo se usan.

En internet hay muchos cursos y muy buenos, tanto de Access como de VBA.

hola.

Perdón me equivoque ese no era el código, por limitaciones del corporativo tuve que utilizar access en el cual soy principiante pero tienes razón era en la parte de fecha_cita debía estar cualquierfecha, como anteriormente estaba el código y si de hecho tengo que tomar cursos como lo mencionas.

Sin embargo, hice todo lo que me explicaste antes y me resulta en #¿Nombre?. En el textbox de vencimiento, puse el = Fecha_Vencimiento(fecha_cita) y es lo que me arroja.

Gracias!

Tendría que ver la base de datos, para poder decirte por que está funcionando mal.

Un código muy parecido lo uso muy a menudo y sin problemas, y el que te puse lo he probado antes de ponerlo.

hola.

Me podrías proporcionar un correo para enviártela, de favor.

Saludos!

Si quieres, puedes poner la BBDD en un servidor tipo Dropbox, OneDrive, etc. Personalmente utilizo DropBox, es muy cómodo de usar.
Te pongo un enlace, https://db.tt/U5sFOul7.
Te crea unas carpetas, pones la base de datos, o lo que quieras compartir en la carpeta Public o Publico, o en una que te crees, y luego, con el botón derecho, seleccionas la opción "Compartir enlace a Drop'box" y te copia el enlace en el portapapeles. Después, en el la respuesta, pegas el enlace (Ctrl-V) y así lo puedo descargar.
Es muy cómodo y funciona muy bien.

hola.

Aquí esta el link, https://www.dropbox.com/sh/ped4j32m22oflo9/gqYAzB73p5 ahí la checas por favor.

Gracias!

Ya he visto la causa; has puesto el mismo nombre al módulo de VBA que a la función, por lo que Access abre el módulo buscando un procedimiento llamado "Fecha_cita", que coincide con un campo de una tabla que está cargada en el mismo sitio que hace la llamada a la función.

También he visto que almacenas las fechas y las horas por separado, no hace falta, el tipo de datos Fecha/Hora almacena los dos datos a la vez.

Te he corregido el formulario, y te he creado na versión nueva de las tablas, consultas y formulario con las fechas modificadas para reflejar los dos datos. (Hemos ahorrado bastantes campos y espacio)

Te lo dejo aqui:
https://www.dropbox.com/s/rlm2pdn41sih070/caidasrec_2.accdb

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas