** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Funcion que modifica control en formulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Funcion que modifica control en formulario

 Responder Responder
Autor
Mensaje
access_iceman Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2025
Localización: España
Estado: Sin conexión
Puntos: 7
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita access_iceman Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Funcion que modifica control en formulario
    Enviado: 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 
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
access_iceman Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2025
Localización: España
Estado: Sin conexión
Puntos: 7
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita access_iceman Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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


Editado por access_iceman - 19/Enero/2025 a las 19:28
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
access_iceman Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2025
Localización: España
Estado: Sin conexión
Puntos: 7
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita access_iceman Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
access_iceman Ver desplegable
Nuevo
Nuevo


Unido: 19/Enero/2025
Localización: España
Estado: Sin conexión
Puntos: 7
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita access_iceman Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable