Access. Copiar y pegar automáticamente los valores de un registro en todos los registros de 1 formulario

En un formulario tengo 3 campos. En el primero introduzco una lista de nombres. En los otros 2 campos introduzco 1 valor (en cada campo) pero solo en el primer registro.

Cómo puedo crear una macro o código (asociado a un botón) de manera que los valores de 2 de estos campos (del primer registro) se me copien automáticamente en estos 2 mismos campos en todos los registros del formulario?

2 Respuestas

Respuesta
1

¿Puedes poner una imagen del formulario? Depende de si ya hay registros en la tabla origen del formulario, si no hay, etc.

Al no saber como es, si tengo el formulario Copia, con origen en la tabla del mismo nombre, en el primer registro

Como no hay registros anteriores tengo que rellenar Ciudad y País

Puedes ver que el cursor aún está en España( no sale por el confinamiento). En el momento que pulso Enter

El cursor se va a NombreCliente del siguiente registro pero ya me "ha rellenado", ciudad y país.

En este caso el código del evento Al activar el registro es

Private Sub Form_Current()
If Me.NewRecord Then
Ciudad = Nz(DLast("ciudad", "copia"), "")
Pais = Nz(DLast("pais", "copia"), "")
End If
End Sub

Pero tendrías que concretar más.

Hola

El formulario que tengo es básicamente como el de tu imagen (tabular, con 3 campos)

Este lo uso para importar desde Excel una lista de nombres (suelen ser entre 10 y 150 registros) y solo me rellena el campo 1 de los 3 campos que tengo.

Cuando hago la importación siempre tengo el formulario vacío. Después de importar, voy al primer registro y escribo lo que necesito en los campos 2 y 3.

Ahora viene cuando necesitaría la macro o código que me copiara los valores que he escrito en los campos 2 y 3, y los copiara en todos los registros que previamente he importado.

Después uso estos datos en una consulta de datos anexados, y luego vacío el formulario

Lo puedes hacer de muchas formas. Primero te expongo la más sencilla y luego te digo otras.

Supongamos que tengo la tabla Copia como en la imagen

Y con ella tengo hecho un formulario, en el que, lógicamente, tengo que poner la primera ciudad y el primer pais

Puedes ver que el cursor aún está en el control País. Si pulso Enter

El código del evento Después de actualizar del control Pais es

Private Sub Pais_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "update copia set ciudad='" & Me.Ciudad & "', pais='" & Me.Pais & "' where idcliente>" & Me.IdCliente & ""
Me.Requery
End Sub

Me explico

- Lo de Docmd. Setwarnings... es para que no te aparezca la odiosa ventanita de "Va a actualizar..."

- Luego le digo que actualice el valor de los campos Ciudad y Pais de la tabla Copia, en aquellos registros en que su Idcliente sea mayor que el del registro actual, a los valores que aparecen en ese momento en los controles Ciudad y Pais.

Lo de me. Requery es para que el formulario "reconsulte" su origen de registros, es decir la tabla Copia.

Si no son muchos registro, también podrías decirle que fuera "recorriendo" los registros rellenando los controles.

Lo he probado pero tengo unos problemas

-No tengo ningún campo Id porque realmente no lo necesito. He creado uno para ver que pasaba y me ha funcionado bien 1 vez, luego me da problemas al hacer otras importaciones....en el campo Id me aparece "?Nombre?"

-Aunque me funcionara bien con el campo ID, luego ejecuto una consulta de datos anexados para trasladar esta lista a otra tabla que tampoco tiene campo Id

-Cuando cumplimento mis 2 campos y pulso enter, (he puesto el código en el evento "después de actualizar"), me abre visual basic y me aparece esto, con la primera linea marcada en amarillo y la palabra Títol también marcada.

Te comento: La tabla y el formulario tienen el mismo nombre "ActorsDirectorsProvisional3"

Los 3 campos son:

"NomICognoms", que es el que importo y me forma la lista

"IdProv2", no es realmente un campo Id en esta tabla, sino que aquí escribo el nº Id de una película, en otra tabla sí es campo Id

"Títol" que es al que le he puesto el código en "después de actualizar"

La pregunta es: me podrías reescribir el código de manera que no necesitase el campo Id?

El fallo que me da puede ser debido a este campo Id que busca? (creé uno que se llamaba IdDD)

Gracias por tu ayuda

Podemos hacer una cosa. Si quieres, repito, si quieres, haz una copia vacía de la tabla en cuestión y mándamela a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias Alex Per, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Otra solución en el evento Al activar registro

Private Sub Form_Current()
If Me.NewRecord Then
Me.RecordsetClone.MoveLast
Me.campo1 = Me.RecordsetClone!campo1

Me.campo2= Me.RecordsetClone!campo2
End If
End Sub

En donde campo1 y campo2 es el nombre de sus campos.

Le recomiendo NO hacer la actualización en el evento Después de Actualizar del primer campo, es mejor crear dos controles independientes en el formulario y preguntar acá los nombres, por ejemplo.

Ahora, ingreso los campos Ciudad, Bogotá, País, Colombia y hago sobre el botón Actualizar, obtengo los siguiente:

CÓDIGO DEL BOTÓN ACTUALIZAR

Observe que no necesito la clausula WHERE, toda vez, que la información es igual para todos los registros. Esta forma le permite cambiar fácilmente los nombres y volver a actualizar.

Hola, probé el primer código que me facilitó, pero lo que me hace es enviar el primer registro al final de la lista.....

He intentado hacer lo de los campos independientes pero no me aclaro con los nombres de los campos del segundo código....es que no tengo prácticamente ni idea de escribir código.

Otro experto me pidió algo mas de información y le expliqué lo siguiente:

"El formulario que tengo es básicamente como el de tu imagen (tabular, con 3 campos)

Este lo uso para importar desde Excel una lista de nombres (suelen ser entre 10 y 150 registros) y solo me rellena el campo 1 de los 3 campos que tengo.

Cuando hago la importación siempre tengo el formulario vacío. Después de importar, voy al primer registro y escribo lo que necesito en los campos 2 y 3.

Ahora viene cuando necesitaría la macro o código que me copiara los valores que he escrito en los campos 2 y 3, y los copiara en todos los registros que previamente he importado.

Después uso estos datos en una consulta de datos anexados, y luego vacío el formulario"

No tenga en cuenta el primer código no va con su pregunta. Es como le propongo en el segundo ejemplo.

¡Gracias! 

Hola

Como debo nombrar a los dos campos independientes?

El problema es que leo el segundo código pero no se muy bien donde hace referencia a estos 2 campos.....

No se escribir y apenas interpretar código

Solicite el ejemplo a [email protected] y con gusto se lo envío, favor en el asunto hacer referencia a su consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas