Como sustituir Form_Formulario1.campo1.value por Form_Formulario1.txtVariable.value en un modulo?

Tengo conocimiento muy limitados en vba en Access y no acabo de encontrar la manera de hacer esto.

Quiero, en un modulo de Access, hacer referencia a un campo de un formulario, pero no utilizando el nombre del campo, ya que tendría que meter infinidad de líneas iguales cambiando el nombre del campo, sino utilizando una variable con el valor del nombre de ese campo. Ejemplo:

Así lo tengo en un módulo:
Public Function ()
Form_Formulario1.Campo1.value = "Valor"
end Function

Asi lo quiero (correctamente claro):
Public Function (txtValorNombreVerdaderoDelCampo) <--- Lo que quiero es pasar el nombre del campo...
Form_Formulario1.txtValorNombreVerdaderoDelCampo.value = "Valor"
end Function

De esta manera, puedo utilizar la misma función para muchos campos diferentes a los que quiero dar el mismo valor. Esto es muy resumido, supongo que dicho así se puede hacer de otra manera pero esto es lo que necesito.

1 Respuesta

Respuesta

A la función en el módulo tienes que añadirle un parámetro para pasarle el control al que quieres darle el valor. Quedaría algo así como:

Public Function AsignarValor10(miControl As Control)
    miControl.Value = 10
End Function

En vez de 10 asigna el valor que quieras ( y cambia el nombre de la función...)

Para usarla basta con llamarla e indicarle el campo en el que quieres el valor.

Por ejemplo para asignar al campo "Ventas" de un formulario el valor de 10 escribes:

Me.Ventas.Value = AsignarValor10(Me.Ventas)

Como comentario piensa que se puede hacer un bucle que recorra por ejemplo todos los campos de la sección de detalle de un formulario y a los que decidas asignarles valores (por ejemplo a los que sean campos de texto y cuyo nombre comience por algo característico) o cambiarles alguna propiedad o...

Cordiales saludos.

Hola Angel,

Gracias por tu rápida contestación. Creo que no he sabido explicar lo que quiero hacer. A ver si soy capaz :-)
En realidad el valor que quiero pasar a la función del modulo es "el nombre del campo de un formulario". Esto no es problema. Lo hago como he puesto en el coódigo inicial:
Public Function (txtNombreVerdaderoDelCampo) <-- Va aqui.
...
end Function

Mi problema es que quiero utilizar ese valor para hacer una operación sobre ese campo concreto, que cambiara en función de una casuística. Es decir, quiero utilizar un código igual para diferentes campos.

Form_Formulario1.txtValorNombreVerdaderoDelCampo.value = "ValorX" <--- Aqui le voy un valor a ese campo.

El problema es que este código no es correcto....

No se si me he explicado...

La función de prueba que te indiqué AsignarValor10 sirve como dices para diferentes campos. No hace falta que hagas una para cada campo. Desde cualquier campo que la llames te sirve para indicar el nombre del campo sobre el que va a realizar la asignación de valor (no es necesario pasarle lo que tu pones como ejemplo txtValorNombreVerdaderoDelCampo, ya que al llamarla el parámetro miControl le está indicando donde actuar. Puedes pasarlo de otras maneras, pasarle Me. Name, pasarle una variable como miForm as Form, pasarle un parámetro para que lo use en la asignación de valor en lugar del 10 de mi ejemplo. En fin, como parámetros puedes definir y pasarle lo que quieras. Además puedes efectuar en la función cálculos o validaciones sobre los parámetros que le pases de modo que dependiendo de los valores que le pases establezca un valor determinado en el campo destino final. Por ejemplo pasas un parámetro que sea el valor de un campo y en la función compruebas si el valor es superior por ejemplo a 5 que la función devuelva una X, y si es inferior que devuelva una Y al campo que se le halla indicado en el parámetro miControl.

En resumen. La función puedes hacerla de modo que te sirva para usar con cualquier control (lo pasas como miControl), ello no es óbice para que la llamada a la función debas de escribirla siempre que la necesites. SI por ejemplo quiero que se ejecuta asociada al evento después de actualizar de tres controles, tendré que escribir la llamada a la función en los tres eventos de esos controles, igual que si quiero que se ejecute asociada al evento click de algún botón...

No se si me explico correctamente. Espero te sirva. Si no te es suficiente explica un poco más detalladamente con algún ejemplo que quieres que haga la función, desde que campos vas a llamarla, con que eventos...

Cordiales saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas