Copiar datos mismo campo en formulario continuo

Tengo un formulario continuo para sacar materiales de mi bodega; por eso, al completar un registro se agrega automáticamente uno nuevo para seguir con el siguiente material de la lista; Ahora, el campo Solicitante (y otros más) se va(n) repitiendo para todos los materiales del mismo pedido, lo que necesito es lograr que ese campo en los siguientes registros se complete copiando el dato del registro anterior. Ej Registro N°1 Solicitante: Juan Pérez...Registro N°2 Solicitante: Juan Pérez...

Esto se requiere porque en un pedido de 200 materiales copiar y pegar manualmente se hace una pérdida de tiempo.

2 Respuestas

Respuesta

Puedes hacer es duplicar el registro actual de la siguiente manera:

Crea un botón de comando y agrega el código sig, en el evento Click()

Private Sub Comando156_Click()
On Error GoTo Err_Comando156_Click

DoCmd. RunCommand acCmdSelectRecord ' Seleeciona el registro actual
DoCmd. RunCommand acCmdCopy 'Copia el registro actual seleccionado
DoCmd. RunCommand acCmdRecordsGoToNew ' Crea un nuevo registro
DoCmd. RunCommand acCmdSelectRecord ' Seleeciona el registro actual
DoCmd. RunCommand acCmdPaste ' Pega lo copiado anteriormente

Exit_Comando156_Click:
Exit Sub

Err_Comando156_Click:
MsgBox Err.Description
Resume Exit_Comando156_Click
End Sub

Me aparece "La Acción o comando copiar no está disponible ahora"

No sé si estoy equivocado pero, en el ejemplo que me das, el campo Solicitante tendría que ser el primero porque al crear un nuevo registro pegaría el dato copiado al inicio y no serviría para aplicar la solución a otros campos que también se repiten...

Realmente este código es una ayuda cuando todo está bien, o sea, cuando el cursor está situado en el campo del registro en cuestión. Tampoco dices dónde está ese registro a duplicar. ¿En el formulario principal o en un subformulario?, bueno no importa. Aquí tienes otro modo.

Crea un procedimiento con el siguiente código:

Private Sub Nuevo_Registro()

On Error GoTo Err_ Nuevo_Registro_Click

    DoCmd.GoToRecord , , acNewRec

Exit_ Nuevo_Registro_Click:

    Exit Sub

Err_ Nuevo_Registro _Click:

    MsgBox Err.Description

    Resume Exit_ Nuevo_Registro_Click

End Sub

Un Botón de comando llamado Duplicar para crear variables que almacenarán temporalmente cada campo del registro a duplicar, sólo tú sabes cuáles y cuántos con esos nombre de cada campo. Pero te pongo un ejemplo:

Private Sub Duplicar_Click()

‘Asignas las los campos a las variables:

var_ Solicitante = txt_ Solicitante, ‘ Este es el nombre del campo

‘Aquí van las demás variables y los demás campos

.

.

.

‘Aquí llamas a crear nuevo registro, o sea, el primer procedimiento

Nuevo_Registro()

E inviertes la tortilla, o sea, asignas las variables a los campos:

txt_ Solicitante = var_ Solicitante

‘Aquí van los demás campos y las demás variables

.

.

.

End Sub

‘Aquí llamas a crear nuevo registro, o sea, el primer procedimiento

Nuevo_Registro()

Cómo hago ese llamado que mencionas?

En la ventana de código del formulario donde está el botón que deberás llamar Duplicar pega este Código:

Private Sub Nuevo_Registro()

On Error GoTo Err_ Nuevo_Registro_Click

    DoCmd.GoToRecord , , acNewRec

Exit_ Nuevo_Registro_Click:

    Exit Sub

Err_ Nuevo_Registro _Click:

    MsgBox Err.Description

    Resume Exit_ Nuevo_Registro_Click

End Sub

Puedes pegarlo después del evento Duplicar_Click(): Te mando una imagen del icono-botón que abre la ventana de Código...

mmm no te había dicho que trabajo en un subformulario en vista hoja de datos por lo que si creo un botón no aparece accesible; de todas maneras intenté hacer que funcione con el evento "Al bajar una tecla" y presionando F8 ; probé tu sugerencia, hasta el momento efectivamente activa un nuevo registro con el GoTo New record  pero no consigo que copie el registro de arriba en el nuevo registro abajo siguiendo  la instrucción "var_ Solicitante = txt_ Solicitante" que me diste.

Ok. Sabiendo que los datos a duplicar están en un Subformulario la cosa es la misma. La sintaxis para subformulario es esta:

Me![Nombre Del Formulario]!nombreDelcontrol.

También la var_ Solicitante es una variable a nivel de código que puedes usar para almacenar temporalmente UN, escucha, sólo UNNNNNN valor del control (supongamos que se llama txtSolicitante) del Subformulario que enlaza el campo, no sé cómo tú lo llamas, a que haces referencia el campo Solicitante. Te pongo otra vez una situación:

¿Cómo se llama la tabla donde tienes los datos a duplicar? No sé, tú lo sabes. Supongamos que se llama Pedidos.

Supongamos que un campo de esa tabla se llama: Solicitante, y es de tipo String (o sea, cadena de texto: “Juan Pérez”).

Supongamos que el Subformulario se llama “Subformulario Pedidos”,

Supongamos que un control de ese subformulario, ya lo dijimos, se llama: txtSolicitante: la sintaxis para “hablar” de él es:  Me![Subformulario Pedidos]!txtSolicitante.

Los demás campos no sé cuáles son, por ejemplo: Fecha, Monto, etc. Tú lo sabes. Ahora te cito textualmente: “Ahora, el campo Solicitante (y otros más) se va(n) repitiendo para todos los materiales del mismo pedido”. O sea, que vas a duplicar otros más campos aparte de Solicitante.

En la declaración “Private Sub Duplicar_Click()” que YOOOOOO, te doy es donde vas a declarar las variables temporales que almacenan los valores de los cuadros de controles de texto:

Private Sub Duplicar_Click()

Dim var_Solicitante, var_Fecha, var_Monto  ' ETC Declaración de variables

 'Asignas los campos a las variables:

var_ Solicitante = Me![Subformulario Pedidos]!txtSolicitante

var_ Fecha = Me![Subformulario Pedidos]!Fecha

var_ Monto = Me![Subformulario Pedidos]!Monto

'Aquí van las demás variables y los demás campos

.

.

'Aquí llamas a crear nuevo registro, o sea, el primer procedimiento

Nuevo_Registro ' Disculpa yo puse en el anterior Paréntesis pero no van

 Me![Subformulario Pedidos]!txtSolicitante = var_Solicitante

Me![Subformulario Pedidos]!Fecha = var_Fecha

Me![Subformulario Pedidos]!Monto = var_Monto

 'Aquí van los demás campos y las demás variables

End Sub

Respuesta

En mi opinión la estructura que debes usar es la que hay en la BD de Ejemplo de Microsoft Northwind.

Es lo mismo que si quieres generar un pedido con todas las líneas que necesites.

Esta BD, supongo que estará en muchos sitios, pero el más cercano es una de las Plantillas del própio Access.

Otro Ejemplo es la antigua Bd Neptuno de Microsoft.

Esta última está en la cabecera de la página de Emilio Sancha>>

Espero te sirva de ayuda. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas