Pasar un campo calculado a una tabla

Siento molestarte, pero como tu resolviste mi duda sobre como calcular la estación del año en función de la fecha introducida en otro campo, quizás puedas ahora ayudarme a que la estación no sólo salga en el formulario sino también en la tabla.

En realidad, necesito pasar dos "campos calculados" a la tabla

Verás:

A partir del campo fecha, calculo en otro campo el Mes con la función Mes y en otro campo la estación, con el código que tu me falicitaste

¿Se podría hacer esto?

Ya visité la página de nekkito, gracias. Y he visto que él tiene un ejemplo con un campo calculado (suma de dos campos). Lo he estado probando pero como no tengo ni idea, pues no me sale. Si hago su ejemplo, con sus datos, si.

1 respuesta

Respuesta
1

Supongamos que tu tabla se llama Tabla1, y entre otros tienes los siguientes campos: Fecha, Mes y Estación

Supongamos que en tu formulario tienes un campo llamado Fecha (es en el que tu escribes), y otros dos, txtEstacion y txtMes, que son los dos campos calculados según mi código y la función Mes.

Lo que tienes que hacer es añadir a tu formulario otros dos cuadros de texto invisibles (Pestaña Formato->Visible:No) y como origen del control les pones Mes a uno y al otro Estacion y como nombre, lo mismo, Mes y Estacion.

En el evento "Despues de actualizar" del cuadro Fecha, tendrás el código que calcula la estación que te di en la otra respuesta. Pues al final del mismo, despues del End Select, le añades esto:

Me.Mes=me.txtMes

Me.Estacion=Me.txtEstacion

Si tienes algún problema, ya sabes, me lo dices.

Me acabo de dar cuenta que te di una respuesta "equivocada", en el sentido de que es más sencillo que todo eso:

Si tienes la tabla como te decía arriba, no te hace falta poner los cuadros de texto invisible, lo único que tienes que hacer es ponerle a los campos Mes y Estación como Origen e COntrol, los campos de la tabla.

Luego, en el evento después de actualizar le pones este código:

Private Sub Fecha_AfterUpdate()
Dim vMes As Integer
Dim vDia As Integer
If IsNull(Me.Fecha) Then
Me.Estación = vbNullString
Me.Mes = Null
Exit Sub
End If
vMes = Month(Me.Fecha)
vDia = Day(Me.Fecha)
Select Case vMes
Case 1, 2
Me.Estación = "Invierno"
Case 3
If vDia < 21 Then
Me.Estación = "Invierno"
Else
Me.Estación = "Primavera"
End If
Case 4, 5
Me.Estación = "Primavera"
Case 6
If vDia < 21 Then
Me.Estación = "Primavera"
Else
Me.Estación = "Verano"
End If
Case 7, 8
Me.Estación = "Verano"
Case 9
If vDia < 21 Then
Me.Estación = "Verano"
Else
Me.Estación = "Otoño"
End If
Case 10, 11
Me.Estación = "Otoño"
Case 12
If vDia < 21 Then
Me.Estación = "Otoño"
Else
Me.Estación = "Invierno"
End If
End Select
Me.Mes = Month(Me.Fecha)
End Sub

Te subo una miniBD de ejemplo para que lo veas más claro:

http://filebig.net/files/J7nCTv5PNf

Siento el retraso.

Ok, ha funcionado a la perfección y hasta me he atrevido a incluir el año que también lo tenía calculado a partir de la fecha y ahora ya lo tengo en la tabla, je, je.

Pero tengo una duda más: si en lugar el número de mes quisiera que me pusiera el nombre, ¿cómo sería? ya por curiosidad porque a través de consultas, que es con lo que trabajaré, podré hacer que me salga el nombre del mes y no el número

Gracias, again

Para poner el mes, tienes que usar la función MonthName. Sustituye esto:

Me.Mes = Month(Me.Fecha)

por esto otro:

Me.Mes = MonthName(Month(Me.Fecha))

Tendrías otras opciones, como usar un select case, donde a cada número de mes le asignas su nombre

Select Case Month(Me.Fecha)

Case 1

Me.Mes="Enero"....

Otra opción sería hacer una tabla (TMeses), con un ID(número) y Mes (texto), donde pondrás los 12 números con el nombre del mes, y luego usarías la función DLookup para buscar el nombre:

Me.Mes=DLookup("Mes","TMeses","[ID]=" & Month(Me.Fecha)

Hola de nuevo

He probado con la primera opción que me dijiste y me da un error. Ahora no recuerdo cuál. De hecho también la probé yo en su momento y no me funcionaba

La segunda, creo que tampoco

Y la tercera, ¿dónde meto ese código???

siento ser tan pesada.

Muchas gracias

Que no molestas, para eso estamos, je je

Mira, ahora voy un poco justo de tiempo, pero mañana por la mñn te preparo unos ejemplitos con las 3 opciones, y te explico donde poner cada cosa.

ok

zenkius!!!!

Te dejo aquí el ejemplo:

http://filebig.net/files/wUNTERJUET

Es el mismo archivo que te mandé anteriormente, pero ampliado:

Hay una nueva Tabla2, que es en la que se basan los formularios Opcion01, 02 y 03, y la tabla TMeses, que tiene los meses con sus números.

Opción01: En el código, le añades, al final del Select Case que te pone las estaciones, alguna de estas opciones:

Me.Mes = MonthName(Month(Me.Fecha))

Me.Mes = MonthName(vMes) , porque ya tienes en vMes el número de mes (lo haces al principio)

Me.Mes = StrConv(MonthName(Month(Me.Fecha)), vbProperCase)

Me.Mes = StrConv(MonthName(vMes), vbProperCase)

Estas dos opciones son para que el nombre del mes te salga en mayúscula la primera letra.

Opción02: En el código, le añades, al final del Select Case que te pone las estaciones, este otro Select Case:

Select Case vMes
Case 1
Me.Mes = "Enero"
Case 2
Me.Mes = "Febrero"
Case 3
Me.Mes = "Marzo"
Case 4
Me.Mes = "Abril"
Case 5
Me.Mes = "Mayo"
Case 6
Me.Mes = "Junio"
Case 7
Me.Mes = "Julio"
Case 8
Me.Mes = "Agosto"
Case 9
Me.Mes = "Septiembre"
Case 10
Me.Mes = "Octubre"
Case 11
Me.Mes = "Noviembre"
Case 12
Me.Mes = "Diciembre"
End Select

Opción03: esta es la que usa la tabla. En el código, le añades, al final del Select Case que te pone las estaciones, alguna de estas dos opciones:

Me.Mes = DLookup("Mes", "TMeses", "[ID]=" & vMes)

Me.Mes=DLookup("Mes","TMeses","[ID]=" & Month(Me.Fecha)

La explicación entre ambas es la misma, ya tienes el número de mes calculado en la variable vMes.

Hola, estoy con la opción MonthName, me sale un error: "el valor que introdujo no es valido para este campo"

Cuando escribo esta función, me exige esta estructura: month as long.

¿Como estas usando en MonthName? ¿Así: Me.Mes = MonthName(Month(Me.Fecha))? ¿O así: Me.Mes = MonthName(vMes)?

Si usas la segunda forma, prueba a cambiar al principio el Dim vMes As Integer por vMes As Long, aunque no creo que sea por eso, porque a mí me funciona perfectamente como te lo mandé.

Por cierto, ¿la bd de ejemplo te funciona correctamente?

Nada, mas fácil que todo eso. Tenia el campo mes en numero y es texto. Mare Mía. No te cierro por si acaso. GRacias

Sveinbjorn, me ha funcionado todo a la perfección. Y tu base, de datos, que no pude contestarte antes, funciona correctísimamente.

Ahora tengo otra "question" que me ha surgido sobre la marcha y ya con esto, creo que finalizo.

¿se puede calcular qué día de la semana es/fue en función de la fecha?

En mi base de datos tengo fechas desde el 1986 hasta hoy

Muchísimas gracias

Para saber el día de la semana tienes varias opciones (todas para usar en el editor vba). Si tienes un cuadro de texto txtDiaSemana, y quieres que se rellene al meter una fecha, en el evento después de actualizar de tu cuadro Fecha (le llamaré txtFecha), pon uno de estos:

1º/ Me.txtDiaSemana=Format(Me.txtFecha,"dddd")

2º/ Me.txtDiaSemana=WeekdayName(Weekday(Format(Me.txtFecha, "mm/dd/yyyy"), vbMonday), False, vbMonday)

3º/ Dim vDia as integer

vDia=Weekday(Format(Me.txtFecha, "mm/dd/yyyy"),vbMonday)

Select Case vDia

Case 1

Me.txtDiaSemana="Lunes"

Case 2

Me.txtDiaSemana="Martes"

...

...

Ok. Funciona pero... Con loS años bisiestos no. Se podría solventar??

Oh! Pues no tengo ni idea... Que cosa más rara que no te funcione con los bisiestos...

Yo llevo un rato metiendo fechas de 2012 y 2013 y devuelve el día correcto, con las opciones 1 y 2 (con la 3 ya no probé, pero imagino que funcionará también).

No sé que decirte... ¿Qué opción probaste?

La 3. Vaya, siempre escojo maL. Voy por las otras y t dIgo

Al final probé una de las otras y me funcionó así que... trabajo concluido, por ahora, je, je.

Muchísimas gracias por tu ayuda Sveinbjorn. Ha sido un placer poder contar contigo

Hasta la próxima y...

¡¡¡¡¡Feliz Navidad!!!!!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas