Imprimir página | Cerrar ventana

Funcion que modifica control en formulario

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=87031
Fecha de impresión: 26/Marzo/2026 a las 17:28


Tema: Funcion que modifica control en formulario
Publicado por: access_iceman
Asunto: Funcion que modifica control en formulario
Fecha de publicación: 19/Enero/2025 a las 02:46
Buenas noches. Os describo el problema que tengo

Tengo en un Modulo la siguiente función:

Public Function actualizarcolores(nombreformulario As Form)
Forms!nombreformulario![color].BackColor = vbWhite
Forms!nombreformulario![color].ForeColor = vbBlack
End Function

Llamo desde el mismo formulario sobre el que actuaré a la funcion con:

actualizarcolores [FORMULARIO 23]

Pero esto no funciona.

Evidentemente la sintaxis no está bien, tanto en la funcion como en la llamada, pero no sé lo bastante de Access para darme cuenta de mi error.
Por favor, me podéis ayudar?

Gracias 



Respuestas:
Publicado por: xavi
Fecha de publicación: 19/Enero/2025 a las 13:32
Hola access_iceman y bienvenido al foro,

Punto 1.
Se entiende que el posible formulario a pintar contiene un control llamado "color".

Punto 2.
Se entiende que la función pública está en un módulo independiente.

Punto 3.
¿Desde dónde llamas la función?

Si es desde VBA y en el mismo formulario, bastaría con:
 actualizacolores Me

Si es dese de otro formulario, recomiendo otra sintaxis:
  actualizacolores Forms("FORMULARIO 23")

Consejo: los nombres de los controles y los objetos sin espacios ni caracteres extraños. Y a poder ser, descriptivos.

Ejemplo (imaginando un formulario con datos de clientes): frmClientes. Un prefijo para indicar el tipo de objeto y un nombre descriptivo a continuación.

A ver si así te funciona.

Un saludo







-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: access_iceman
Fecha de publicación: 19/Enero/2025 a las 19:24
Hola Xavi

Lo primero muchas gracias por tu interés y ayuda. 
Respecto a los 2 primeros apartados de tu contestación, si, estás en lo cierto en los dos.

Pero creo que expliqué mal mi problema. 

Llamo a la función desde el Formulario en el que quiero cambiar la apariencia del campo [color].
Dentro de la función, modifico la apariencia de [color] con esto:
Forms![23-CONSULTA CATALOGO]![color].ForeColor = vbBlack

Esto funciona sin problemas tal y como tu me indicas. El problema está en que cuando quiero utilizar esta misma función en otro formulario, por ejemplo [24-FORMULARIO] no sé como indicar en la instrucción que es otro formulario
 
Cómo indico en la instrucción que cambia el campo color, que es otro formulario?

Forms![23-CONSULTA CATALOGO]![color].ForeColor = vbBlack. Cómo substituyo el nombre del formulario por el del Formulario actual en esta línea?

Seguramente para tí es obvio como hacerlo, pero mi nivel de access, no es muy bueno
Reitero. Gràcies pel teu interès, minyó! Wink


Publicado por: xavi
Fecha de publicación: 20/Enero/2025 a las 08:27
Si solo quieres sustituir el nombre 23-CONSULTA CATALOGO por el nombre del formulario dónde se ejecuta el código, se puede hacer así:

Forms(Me.Name)![color].ForeColor

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: access_iceman
Fecha de publicación: 20/Enero/2025 a las 18:42
Hola Xavi
He probado lo que dices pero da error   "El uso de la palabra clave Me no es válido"
Se te ocurre alguna otra manera? La sentencia que pongo es la siguiente:

If Forms(Me.Name)![color].Value = "" Then
Forms(Me.Name)![color].ForeColor = vbBlack

Creo haber leído que la palabra clave Me no se admite en módulos? No sé si estoy en lo cierto

Gracias por tu ayuda


Publicado por: xavi
Fecha de publicación: 20/Enero/2025 a las 19:20
A lo mejor no te entendí pero asumí que "Cómo substituyo el nombre del formulario por el del Formulario actual en esta línea?" significaba que lo lanzabas desde el propio formulario.

Me temo que me falta algo de información. Intenta volver a explicar despacito que tienes hecho, dónde lo tienes hecho y dónde quieres poner el código para que haga lo que deseas.

Recuerda que nosotros no vemos la aplicación por lo que no des por supuestas cosas.

Un saludo



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: access_iceman
Fecha de publicación: 21/Enero/2025 a las 18:59
Hola de nuevo, Xavi. y gracias por contestar.
Finalmente he conseguido que funcione, orientándome por tu respuesta.

Yo lo que quería era una función, que pudiera actuar en varios formularios, en la que se modificaran los colores del campo [color], presente en todos los formularios, cada vez que se modifique el valor de ese campo. Está función ha de estar situada en un Modulo, lógicamente

Finalmente he hecho esto:
Public Function actualizarcolores(ForName As Form)

If ForName![color].Value = "hola" Then
ForName![color].BackColor = vbWhite
ForName![color].ForeColor = vbBlack

End if
End function

Y a la función la llamo así:
actualizarcolores Me. 

Y así funciona
Muchas gracias por tu ayuda





Imprimir página | Cerrar ventana