Inicio > Microsoft Access > marciana > Crear campo numérico que reinicie al cambiar de año

Crear campo numérico que reinicie al cambiar de año

Experto:
Usuario:
Fecha: 01/12/2007
Valoración: (5,00 sobre 5) Categoría: Microsoft Access
22/11/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Buenas tardes, Marciana,

tengo que hacer una base de datos de correspondencia que tenga un campo contador (pero no autonumérico) que se reinicie al cambiar el año.

Por favor, explícame muy detalladamente cada paso que soy principiante en el VBA y con las indicaciones que he encontrado en internet no he sido capaz de sacarlo sola.

Un saludo, y muchas gracias por anticipado,


María
22/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
Hola María
Contá con mi ayuda con todo gusto. Te cuento que es más fácil ayudarte y llegar rápido a una solución cuando se explica bien el problema. Me ha sucedido que después de 5 o 6 cambios de mensajes recién he podido comprender el problema.

Ahora tu consulta.
Hay muchas formas de hacerlo. Lo primero que se me ocurre es guardar el año en una tabla. Yo suelo usar una tabla Parametros (ya que sos nueva, te recomiendo que no uses acentos, ni eñes en nombre de tablas y campos) donde guardo información de ese tipo.
Entonces, la segunda cosa sería hacer una macro que se ejecute cada vez que se abre la base y que compare la fecha actual (la del sistema en que está corriendo) con el dato guardado en Parametros, si el año ha cambiado entonces reiniciará el contador.

Fijate si hasta acá estoy entendiendo bien. Si es así sería bueno que me explicaras prolijamente lo que hace la aplicación con que estás trabajando. Una cosa que se me ocurrió es si reiniciar el contador no generará conflictos de duplicación.
En caso de que esta solución te convenga yo te escribiría la función que debería ejecutar la macro para realizar el chequeo de año y en el caso de que haya cambiado realice el cambio.

Espero tu respuesta, cordialmente, Marciana
22/11/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Te cuento más concretamente:

tengo una base de datos que tiene los siguientes campos:

Codigo (que es el campo contador, se puede duplicar años distintos)
Fecha de envio
Fecha de respuesta
Remitente
Asunto
Destinatario

La finalidad que quiero conseguier es que el campo CODIGO se genere automáticamente al hacer un nuevo registro y que reinicie la cuenta de cartas recibidas al comenzar un nuevo año. Es decir, si en 2007 llevo 45 cartas el CODIGO sería 0045. Si la primera carta recibida en 2008 es el 12 de enero de 2008 su CODIGO sería 0001 (aunque hubiera habido dicho codigo en la primera carta recibida en 2007).

Me he explicado o lo he liado demasiado.

Muchas gracias por ser tan rápida y por tu dedicación a mi inexperiencia.

Un saludo,

María
22/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
Muy clara tu explicación, María.
No se cuanto se ha desarrollado el sistema.

¿Hay un formulario donde das de alta una nueva carta? Si es así yo agregaría a ese formulario el siguiente código.

Private Sub Form_BeforeInsert(Cancel As Integer)
Dim UltimaCuenta As Long
UltimaCuenta = DMax("Cuenta", "Cartas")
Cuenta = UltimaCuenta + 1
SendKeys "{F9}"
End Sub

Yo lo probé y funciona perfecto. supuse que la tabla se llama "Cartas"

Con esto solamente se incrementa el contador al agregar un nuevo registro.

Para probarlo tenés que escribir algo en alguno de los datos del nuevo registro. Apenas comiences a hacerlo te colocará el número.
Se me está ocurriendo una forma sencilla de solucionar todo.
Necesito que me digas si esta prueba funcionó.
Cordialmente, Marciana
23/11/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Buenas tardes, Marciana:

La prueba ha funcionado a la perfección.

Muchísimas gracias. Ya sólo falta reiniciar al cambiar de año.

Agradeciéndote tu esfuerzo, te envío un saludo,

María.
23/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
María
Si necesitás ayuda para reiniciar el contador, decimelo.
Cordialmente, Marciana
23/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
María
Ahora vamos a resolver lo de reiniciar el contador.
Cordialmente, Marciana
24/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
Esto resuelve, pero hay un problema que me apareció después. Para resolver todo bien hay que hacer lo siguiente:

1) Crear una tabla Parametros que tenga un solo campo "Anio" de tipo Long
2) A la tabla Cartas agregar un campo Anio de tipo long que tenga valor predeterminado
=year(Date())
3)Agregar en el formulario cartas el siguiente código:
Public Function VerificaAnio()
Dim rst As New ADODB.Recordset
Dim AnioActual As Integer
Dim UltimaCuenta As Long

rst.Open "Parametros", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rst.MoveFirst
AnioActual = Year(Date)
If rst("Anio") = AnioActual Then
UltimaCuenta = Nz(DMax("Cuenta", "Cartas", "Anio = " & AnioActual), 0)
VerificaAnio = UltimaCuenta + 1
Else
rst("Anio") = AnioActual
rst.Update
VerificaAnio = 1
End If
rst.Close
End Function

Private Sub Form_BeforeInsert(Cancel As Integer)
Cuenta = VerificaAnio()
SendKeys "{F9}"

End Sub

Contame como te fue.
Cordialmente, Marciana
26/11/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Marciana, disculpa que te moleste de nuevo con el mismo asunto, pero es que me marca en amarillo Private Sub Form_Before Insert y en azul Cuenta indicando "no se ha definido la variable".
No sé qué es lo que he hecho más.
Me puedes orientar, por favor.
Muchas gracias por tu ayuda y paciencia.
Un saludo,

María
27/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
Hola María
Te sugiero lo siguiente:

1) Verificar que la tabla "Carta" tenga un campo que se llama "Cuenta", y un campo "Anio". Si los nombres no coinciden deberás hacer los cambios correspondientes.

2)Creá un formulario nuevo de tipo columna con la tabla Carta

3) Poné el formulario del paso 2 en modo diseño y en la ventana código de ese formulario pegá el último código que te envié.

4) Verificá que tenés la tabla "Parametros" con el campo "Anio" y que tiene como dato 2007.

Yo tengo hecha una base con esta solución y funciona bien.
Una vez que funcione esta parte tengo alguna sugerencia que hacerte para hacer pruebas y mejorar el funcionamiento.
Espero tu respuesta, Marciana
28/11/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Buenos días, Marciana,

Ha funcionado a la perfección. El problema es que, al inicio del código me
salía predeterminado "option Explcit" y no funcionaba, pero funciona
perfecto. Muchísimas gracias por tu ayuda. Espero tus noticias para las
mejoras que me has comentado.
Gracias de nuevo. Un saludo,

María D.
28/11/2007
mariaduenas, experto respondiendo en Microsoft Access
Experto
Hola María
Me alegro mucho que todo funcione bien. La Opción "Option Explicit" es muy importante, se activa desde Herramientas/Opciones y su activación te obliga a declarar todas las variables. Esto contribuye a mejorar la calidad del código y a evitar errores.

En el formulario donde actualizás Cartas te sugiero que el control "Cuenta" abras sus propiedades (hay un botón Propiedades en la barra de herramientas, tenés que tener seleccionado el control) En la ficha "Otras" (lo digo de memoria, me puedo equivocar) elige la opción "Punto de tabulación" en No. esto hace que cuando se activa el formulario el cursor no se posiciones en el control Cuenta porque este se debe actualizar automáticamente. Es más en la ficha "Datos" (otra vez de memoria) también en Propiedades, elegí la opción "Bloqueado" en Sí. Esto hace que el usuario no la modifique inadvertidamente.

Ha sido muy agradable dialogar contigo. Marciana
01/12/2007
mariaduenas, usuario preguntando en Microsoft Access
Usuario
Muchísimas gracias por todo, Marciana. Me has ayudado muchísimo, con paciencia y con una gran profesionalidad. Te agradezco muchísimo todo tu esfuerzo.
Un saludo
Enlaces patrocinados