¿Puedo obtener un rango de fechas desde un campo año y un campo trimestre?

En un formulario tengo un cuadro de texto donde introduzco el año y un cuadro combinado donde selecciono el trimestre. ¿A partir de estos campos puedo obtener la fecha inicial y la fecha final para luego usarla en un DSUM entre fechas?

Es decir, si tengo esto:

Quisiera obtener:

FechaInicio = 1/01/2021

FechaFinal = 31/03/2021

3 respuestas

Respuesta
2

Lo puedes hacer de muchas formas. Una sencilla es, si tengo el formulario, con los cuadros de texto ValorAño, Trimestre, Primerdía, Ultimodia, y un cuadro de texto, que estaría oculto(pero lo dejo a la vista para que veas como crea el primer día de cada trimestre) llamado A y escribo un año y un trimestre( en tu caso lo eliges)

el cursor aún está en Trimestre. Cuando pulso Enter

En este caso, en el evento Después de actualizar del cuadro de cuadro de texto Trimestre( en tu caso sería en el mismo evento del combinado) le tengo puesto

Private Sub Trimestre_AfterUpdate()
a = CDate("01" & "/" & Me.Trimestre & "/" & "" & Me.ValorAño & "")
PrimerDia = DateSerial(Year(a), Int((Month(a) - 1) / 3) * 3 + 1, 1)
UltimoDia = DateSerial(Year(a), Int((Month(a) - 1) / 3) * 3 + 4, 0)
End Sub
Respuesta
1

Eloy: Según la figura vamos a suponesr que tienes:

Un Control año, llamado ElAño, Un ComboBox llamado Trimestre con los valores>>

1º Trimestre, 2º Trimestre, 3º Trimestre, 4º Trimestre (Lista de valores).

Un Control de Fecha Inicial llamado >> FIniTrim

Un control de Fecha Final llamado >> FFinTrim

De ese modo en el Evento AfterUpdate del Combo Trimestre:

Private Sub Trimestre_AfterUpdate()
If IsNull(Me.ElAño) Then
        MsgBox "El dato del año debe tener un Valor", vbCritical, "FALTA DATO"
        Exit Sub
End If
Select Case Me.Trimestre
        Case "1º Trimestre"
                Me.FIniTrim = DateSerial(Me.ElAño, 1, 1)
                Me.FFinTrim = DateSerial(Me.ElAño, 3, 31)
        Case "2º Trimestre"
                Me.FIniTrim = DateSerial(Me.ElAño, 4, 1)
                Me.FFinTrim = DateSerial(Me.ElAño, 6, 30)
        Case "3º Trimestre"
                Me.FIniTrim = DateSerial(Me.ElAño, 7, 1)
                Me.FFinTrim = DateSerial(Me.ElAño, 9, 30)
        Case "4º Trimestre"
                Me.FIniTrim = DateSerial(Me.ElAño, 10, 1)
                Me.FFinTrim = DateSerial(Me.ElAño, 12, 31)
End Select
End Sub

Espero te sirva. Saludos >> JTJ

Respuesta
1

¿Cuántas columnas tiene en combo TRIMESTRE?

Tengo estas dos, y coge el valor de la 1º:

1   1º Trimestre

2   2º Trimestre

3   3º Trimestre

4   4º Trimestre

Se puede hacer mediante una función VBA. He preparado este ejemplo.}

Tabla Pedidos (Solo seleccioné unas filas)

Hago una consulta de referencias cruzadas por Trimestre con Totales para validar el resultado con respecto al uso de la función.

Consulta de referencias cruzadas por Trimestre

Llamada de la función pasando como parámetros el año 2006 y trimestre 1.

Observe el uso de la función con DSUM() que el resultado es 314, igual al valor de la columna Trimestre 1 de la consulta de referencias cruzadas.

rango(2006,1) retorna Between #01/01/2006# AND #3/31/2006#  

Función rango()

Puede ingresar el código de la función en un procedimiento, lo hago en una función para hacer mejor seguimiento al código de prueba. La función DSUM() puede llamarla en el evento Después de actualizar del cuadro combinado, algo como:

Dim total_gastos AS Double

total_gastos=DSum("[Gastos]", "Pedidos", "FechaPedido " & rango(Me.Año,Me.Trimestre) )

Si quiere el ejemplo puede solicitarlo a [email protected], favor en el asunto anotar la consulta.

Se me olvidó adjuntar el formulario con el uso práctico de la función. Observe que no necesito crear campos adicionales para guardar la primera y segunda fecha.

Este es el código del evento Después de actualizar del cuadro combinado TRIMESTRE.

Sencillo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas