Obtener datos de registro anterior en nuevo registro de formulario

En una aplicación para gestionar una pequeña empresa tengo un formulario que hace las veces de planilla diaria de entradas y salidas. Me gustaría que mediante un botón de comando se pueda copiar el valor del campo "cierre de caja" del registro anterior en el campo "inicio de caja" del registro actual.

Actualmente lo escribo a mano, y la idea es hacerlo de forma automática.

Siguiendo algunos tutoriales y ejemplos logré hacer que cuando se crea un registro nuevo se copie automáticamente el valor del campo mencionado. Pero esto no es lo que yo quiero hacer. Lo que yo quiero es que al crear el registro nuevo el campo "inicio de caja" esté en blanco, y que al hacer click en el botón se copie el valor de "cierre de caja" del registro anterior.

Añado que el formulario "Caja" está insertado como subformulario dentro de otro formulario llamado "Gestor", que es donde se maneja toda la información.

Por cierto, los registros están ordenados por fecha.

Saludos y agradezco su ayuda.

2 respuestas

Respuesta
1

¡Gracias! 

Intenté hacerlo como explicaste en el otro post. De acuerdo a mis campos el código quedaría así:

Private Sub Form_Current()

If Me.NewRecord Then Me.Inicio = DLast("Cierre de caja")

End Sub

Pero cuando abro el formulario me sale este error: 

"Error de compilación: el argumento no es opcional"

Pero además de este error, ocurre que este método es para tomar un valor anterior cuando se crea un registro nuevo, y yo lo que necesito es que cuando se crea un registro nuevo, el campo "inicio" esté en cero, y que mediante un botón de comando se copie el valor del campo "cierre" del registro anterior (los registros están ordenados por fecha).

Primero, la función DLast() requiere al menos dos parámetros, el nombre del campo y el nombre de la tabla o consulta donde se encuentra el campo, y tu solo pones uno.

Segundo, si quieres poner el valor cuando pulsas en botón, pon el código en el evento "Al hacer click" de tu botón, no en "al activar registro" del formulario.

No funciona.

Con respecto al punto uno, agregué el nombre de la tabla:

Private Sub Comando585_Click(Cancel As Integer)

If Me.NewRecord Then Me.INICIO = DLast("Cierre", "Caja1")

End Sub

Si lo pongo así no ocurre nada cuando hago click sobre el botón. Se me ocurrió que esto pasa porque se le está especificando que el evento ocurra cuando se trata de un nuevo registro, lo cual no siempre es así. Me explico: a veces puede darse del caso de tener que ingresar datos en la planilla anterior siendo que la planilla actual ya está abierta y con datos ingresados. Por eso no me sirve que el comando tome como referencia "cuando se crea un nuevo registro". Independientemente de si el registro es nuevo o no, necesito que mediante el botón se copie, e incluso se sobreescriba el valor tomando los datos del campo de la planilla anterior. Disculpa mi modo de expresarme, como ya he dicho anteriormente disto mucho de ser un experto en Access.

Quítale el If Me. NewRecord Then, para que se ejecute siempre que pulses el botón

Me sale esto:

"Se ha producido el error 2001 en tiempo de ejecución:

Canceló la operación anterior."

La desesperación se apodera de mí XD

Si a tu botón sólo le tienes puesto este código:

Private Sub Comando585_Click(Cancel As Integer)

Me.INICIO = DLast("Cierre", "Caja1")

End Sub

El error ese no me tiene sentido... Cuando te salta el error, si le das a depurar ¿a dónde te lleva?

Respuesta

Carlos: Aunque das bastantes datos, a mi modo de verlo, para una contestación con probabilidades de acierto necesitaría saber:

Dónde está ubicado >> InicioCaja, y dónde CierreCaja

La misma figura (imagen), que has facilitado, sería mejor en vista de diseño, porque ayuda a ubicar los SubForms y controles. Si además pones los Nombres de esos SubForm, y como se vinculan perfecto.

Aparentemente hay Form Principal y 3 SubForms. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas