[campo de acceso] visible según condición
Bonjour, soy nuevo en este foro y busco la ayuda de especialistas en Access. Estoy creando una base de datos para la gestión de muebles (mesas, formularios) hasta ahora no hay problema. En un formulario, tengo dos campos: un campo "Categoría" y un campo "Altura de asiento". Quiero que el campo "Altura de asiento" aparezca cuando el campo "Categoría" contiene el valor "Silla". He escrito el siguiente código en la propiedad después de ACTUALIZAR el campo "Categoría":
If [Categoría] = "Silla" Then
[Altura de asiento].Visible = True
Else
[Altura de asiento].Visible = False
End If
No funciona porque se aplica a todos los registros de la tabla y no se mantiene en memoria en el registro correspondiente.
¿Cómo puedo hacerlo? Les agradezco su valiosa ayuda
If [Categoría] = "Silla" Then
[Altura de asiento].Visible = True
Else
[Altura de asiento].Visible = False
End If
No funciona porque se aplica a todos los registros de la tabla y no se mantiene en memoria en el registro correspondiente.
¿Cómo puedo hacerlo? Les agradezco su valiosa ayuda
Configuración: Windows XP Access 2003
26 respuestas
-
Usuario anónimoHola,
también se debe poner este código en el evento current() del formulario.
--
Cuando jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia canta en inglés. -
Renaissance AutorClaro, funciona.
Muchas gracias por la rapidez de la respuesta.
Cordialmente. -
domikHola,
aprovecho esta conversación porque yo también tengo un problema similar:
si el valor del campo es "toto", quiero que aparezca o desaparezca una boitexxx que rodea o no una parte de un texto en mi formulario.
He utilizado un código idéntico:
me.boitexxx.Visible = False
Si [Campo] = "toto" Entonces
me.boitexxx.Visible = True
De lo contrario
me.boitexxx.Visible = False
Fin Si
Para ver la caja xxx aparecer o desaparecer, debo posicionarme sobre el campo que contiene "toto", de lo contrario, no pasa nada...
mi formulario está en modo continuo, si cambio de registro sin estar posicionado sobre el campo no tengo el efecto deseado.
¿Tienes alguna idea? -
domikJe ne suis pas très expérimenté...
J'ai fait :
Dans propriétés, l'onglet événement,
Après MAJ [Procédure événementielle] et là j'ai recopié le code.
Peux-tu me dire ce qu'est : l'événement current() du formulaire
Merci. -
Usuario anónimoCuando estás en VBA (donde has puesto el código), selecciona el objeto formulario en la lista de la parte superior izquierda, selecciona el evento current en la lista de la parte superior derecha. Copia el código...
--
Cuando Jimmy dice what'd I say, I love you baby
Es como quien dice, toda la provincia canta en inglés. -
domikEn la lista en la parte superior derecha, solo veo:
After update, beforeupdate, change, click... etc.
No veo ese famoso "evento current".
Además, ya estoy bajo el objeto formulario. Es ahí donde se copió el código.
¿Era necesario copiarlo en otro lugar antes? ¿Cómo?
¿Puedes darme un poco más de explicaciones para un novato...?
Gracias. -
Usuario anónimo¿Bajo qué versión de Access?
Pero tú *debes* tener current()
Mira una captura de pantalla: https://www.cjoint.com/?lEq5IhTDlu
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia que canta en inglés.-
-
-
-
Usuario anónimo@domikHola,
Es importante si cambias el valor del campo en curso, no se mostrará si lo actualizas...
¡Hasta luego!
--
Cuando Jimmy dice "what’d I say, I love you baby"
Es como quien dice, toda la provincia canta en inglés.
-
-
romstek31
Private Sub Form_Current() If Not IsNull([dateValidPlanMinute]) Then [remarqueNonValid].Enabled = False Else [remarqueNonValid].Enabled = True End If End Sub
-
domik
Private Sub Form_Current() If Not IsNull(dateValidPlanMinute) Then [remarqueNonValid].Visible = True Else [remarqueNonValid].Visible = False End If End Sub
También hay que poner este código en el evento BeforeUpdate(Cancel As Integer), como decía HDUPrivate Sub dateValidPlanMinute_BeforeUpdate(Cancel As Integer) If Not IsNull(dateValidPlanMinute) Then [remarqueNonValid].Visible = True Else [remarqueNonValid].Visible = False End If End Sub
-
romstek31@domik¡Muchas gracias, funciona! ;)
-
-
-
younesHola a todos, soy nuevo en el foro
tengo un problema con los combobox, de hecho, quisiera mostrar una lista según otra lista, más precisamente:
al elegir un elemento de un combo, los elementos del segundo combo deben cambiar. He intentado con una consulta, pero no funciona. Y esto en el mismo formulario (Access 2003). -
Usuario anónimoHola,
Esto debería ayudarte: https://grenier.self-access.com/?post/2007/09/05/Listes-deroulantes-liees
¡Hasta luego!
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia canta en inglés. -
Breizhinours35Hola, tres años después...
soy completamente nuevo en Access pero ¡muy motivado!
Trabajo en Access para la gestión de materiales. La base de datos ya fue creada, pero no por mí.
Quisiera añadir esto a la base: cuando en un formulario marco una "casilla de verificación", que me muestre un texto. Si la casilla no está marcada, no lo muestra.
Otra condición: En mi formulario principal, tengo todos los textos que se muestran, para poder orientarme. Cuando marco la casilla correspondiente en este formulario, quiero que se muestre en un informe creado específicamente.
Ya he creado mi tabla, mi formulario y mi informe, pero estoy un poco superado con las consultas y relaciones... necesito un poco de ayuda....
Gracias a todos por sus respuestas.-
Usuario anónimoHola,
En tu formulario, en modo creación, haz clic derecho en la casilla de verificación que debe activar o desactivar la visualización del texto, haz "crear código de evento", generador de código si te lo pide. Normalmente, Access te propone asignar código al evento 'clic' (zona en la parte superior derecha) de la casilla de verificación (en la parte superior izquierda).
Eso es lo que quieres --> hacer algo cuando el usuario haga clic en la casilla de verificación.
Quieres mostrar u ocultar un texto. ¿Dónde se encuentra este texto? ¿En un cuadro de texto? ¿En una etiqueta?
De todas formas, conoces el nombre del control que contiene el texto. Se dice que se llama "texto1".
Entonces, en el evento clic de tu casilla de verificación ("cocher1" por ejemplo), pones:if texto1=true then 'si la casilla está marcada me!texto1.visible=true 'se muestra el cuadro de texto1 else me!texto1.visible=false end if
Para tu otra pregunta, ¡no entendí del todo! Aparentemente tienes casillas de verificación en un formulario y quieres que estas casillas aparezcan en un estado.
Si es así, ¿tus casillas corresponden a tus campos de una (o varias tablas)?
Espero tu respuesta para poder guiarte.
¡Hasta luego!
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia canta en inglés.
-
-
Breizhinours35Salut et merci pour ces premiers infos... j'y vois plus clair
le souci c'est que, voici ce que j'aimerais faire dans l'idéal :
j'ai un formulaire qui fait partie d'une base déjà construite.
Sur ce formulaire j'ai des cases à cocher avec le titre des cases par exemple :
chkbox 1 : repas
chkbox 2 : hôtel
chkbox 3 : déplacement
Je veux choisir dans ce formulaire ce que je veux qu'il s'affiche mais sur un état correspondant et non pas sur le formulaire. Le texte décrit sur l'état est plus complet que sur le formulaire. du style "prévoir 5 repas"
Avec le code que tu m'as donné, cela rend visible sur le formulaire. et plus encore, cela le rend en fait invisible et il ne réapparaît plus ensuite. Je souhaiterais que cela fasse aussi l'effet inverse.
encore mieux, j'aimerais que si je coche la case 2, les repas s'affichent en haut de l'état et non pas au milieu.
merci pour ton aide -
Usuario anónimoRe,
En mi opinión, ya hay un problema de diseño...
Para el efecto inverso, como tú dices, el código que te di debe funcionar. Por supuesto, en el formulario.
Dinos qué tablas tienes y para qué sirve la base de datos, en definitiva, qué quieres que gestione.
Hasta luego
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia que canta en inglés. -
Breizhinours35Lo siento, no puedo ayudar con eso.
-
Usuario anónimoLo que te propongo es que me envíes tu base de datos comprimida.
Si tienes miedo por tus datos (no soy un criminal jaja), haz una copia y vacía las tablas "sensibles".
Lo veré mejor "visualmente" porque ahora está borroso.
Mi correo está en mi perfil.
Por cierto, no podré mirar eso hasta el lunes por la tarde, ahora me voy de fin de semana.
¡Hasta luego!
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia cantando en inglés. -
Breizhinours35Lo siento, pero no puedo ayudarte con eso.
-
Usuario anónimoHola,
A primera vista, si me atengo exactamente a lo que me dices, ¿tienes una tabla de presupuestos con códigos de productos dentro?
Si es así, huele a trampa.
Pero bueno, puede que no tengas tiempo de rehacer una base desde cero.
En tu estado, puedes, como en tu formulario, crear código para mostrar / ocultar objetos (controles).
En el estado en modo creación, haz clic derecho y luego crea el código de evento, generador de código.
Elige el evento open() y ahí pones el código adecuado, como:
if vchek2=true then
me.texte3.visible=true
.....
else
me.texte3.visible=false
.....
end if
A adaptar, por supuesto.
Para el "gran agujero en medio" como dices, no veo bien cómo si realmente tienes una sola tabla de presupuestos. El uso de sub-estados era bastante indicado.
De lo contrario, pero es realmente sucio, puedes usar con el código de arriba el posicionamiento de tus objetos.
Entonces, si tu texto3 no es visible, tienes que "subir" tu texto4, con sus propiedades:
if vchek2=true then
me.texte3.visible=true
me.texte4.top=
....
Pero es sucio...
Dame la estructura de tus tablas, puede que haya algo más simple.
Saludos
--
Cuando Jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia que canta en inglés.-
-
Usuario anónimo@françoisRe,
Lo siento, pero estoy en el trabajo y tengo vacaciones esta noche, así que tengo muchas cosas que terminar.
O bien reduces al máximo tus etiquetas y las pegas unas debajo de otras, estarán casi a la misma altura (al reducirlas, tendrán ~ 1 mm de altura).
Les pones su propiedad 'autoextensible' en sí, ¿funciona eso (no probado)?
O bien, las dejas como están, y en el código que has puesto para hacer visibles/invisibles tus etiquetas, juegas con las propiedades para mostrarlas más o menos alto en el estado (ME.E2.Top=7,55 por ejemplo).
¡Hasta luego!
--
Cuando jimmy dice what’d I say, I love you baby
Es como quien dice, toda la provincia que canta en inglés. -
françois@Usuario anónimoGracias por tomarte el tiempo para responderme DHU, ¡y eso a pesar de tus vacaciones! ¡Que tengas buenas vacaciones entonces!
Con respecto a tu código en tu segunda solución, no veo bien dónde insertarlo. Mi código es el siguiente:
If Forms!P!verso_pretstaion.Form!CB_repas = -1 Then
Date_repas.Visible = True
Else
Date_repas.Visible = False
End If
El problema también es que 7,55 está bien si solo la línea anterior está desactivada... pero en el caso de que estuvieran desactivadas las 4 líneas anteriores?
Necesito poder decir:
si la casilla 1 está inactiva, entonces la etiqueta 2 toma el lugar de la etiqueta 1
y si la casilla 1 está activa, la casilla 2 inactiva, la casilla 3 inactiva, la casilla 4 activa, la etiqueta 4 toma el lugar de la etiqueta 2...
pero es más fácil de decir que de hacer... -
Usuario anónimo@françoisGracias,
Sí, habría que probar las posibilidades, y no es fácil y no es limpio.
¿Has probado la primera solución? (disminuir al máximo las etiquetas y poner su propiedad 'autoextensible' en sí)
¡Hasta luego!
--
Cuando jimmy dice what'd I say, I love you baby
Es como quien diría, Toda la provincia que canta en inglés. -
françois@Usuario anónimoHola HDU, disculpa por esta ausencia... ah, las vacaciones...
He probado tu solución de pegar las etiquetas unas a otras y de ponerlas autoexpandibles...
Varias cosas: no se puede hacer autoexpandible para las etiquetas, sino solo para las zonas de texto... lo cual es un problema en mi caso...
Por otro lado, he intentado con zonas de texto, pero eso no soluciona el problema... me encuentro con 2 zonas de texto casi una encima de la otra si valido ambas...
Entonces subí un poco más arriba en el foro y releí uno de tus mensajes que decía esto:
""Entonces, si tu texto3 no es visible, hay que "subir" tu texto4, con sus propiedades:
if vchek2=true then
me.texto3.visible=true
me.texto4.top= ""
Quería saber dónde poner esta propiedad para que yo pruebe.
Por otro lado, ¿el "top" va a subir el texto hasta el texto anterior? ¿Estás seguro de que no lo va a subir hasta la parte superior de la página simplemente?
Por último, también vi un mensaje donde me decías que el subtipo era muy indicado... no conozco en absoluto los subtipos. ¿Es difícil acostumbrarse a ellos?
Gracias una vez más...
-
-
MiiHola,
también tengo un problema al intentar mostrar un campo según una condición.
El campo sigue visible independientemente de la condición.
Aquí está mi código, esperando que alguien pueda ayudarme.
Private Sub Form_Current()
If EMPLEO = "Desempleado" Then
nivrequis.Visible = False
Else
nivrequis.Visible = True
End If
End Sub
Private Sub nivrequis_BeforeUpdate(Cancel As Integer)
If EMPLEO = "Desempleado" Then
nivrequis.Visible = False
Else
nivrequis.Visible = True
End If
End Sub-
domik[acceso] campo visible bajo condición
Hola,
prueba esto:
Private Sub Form_Current()
If [EMPLOI]= "Desempleado" Then
me.nivrequis.Visible = False
Else
me.nivrequis.Visible = True
End If
End Sub
Private Sub nivrequis_BeforeUpdate(Cancel As Integer)
If [EMPLOI] = "Desempleado" Then
me.nivrequis.Visible = False
Else
me.nivrequis.Visible = True
End If
End Sub -
Mii@domik¡Te agradezco por tu respuesta, domik! ;-)
-
-
tili67Hola,
tengo un problema similar pero en Word.
He creado un formulario y me gustaría que cuando la persona lo complete, mis campos de casillas de verificación sean interactivas.
Me explico, en la pregunta: materia del producto hay la opción entre Acero o inoxidable y me gustaría que la persona que complete la casilla solo pueda poner una cruz. (ya sea uno u otro y no ambos)
Gracias. -
Laura HoltHola,
Mi problema me ha llevado a esta discusión. Veo que algunos de ustedes dominan Access (qué suerte) y necesito su valiosa ayuda.
Tengo una base de datos "contrato" que comprende varias tablas (información, coordenadas, facturación, planificación, fecha, etc.). He creado formularios y subformularios de entrada que agrupan los datos para facilitar la entrada a mis usuarios.
Además, algunos contratos han sido cancelados y no deseo eliminar la ficha, sino únicamente ocultarla usando una casilla de verificación, por ejemplo, activo o inactivo. Todo ello, pudiendo encontrarlos al hacer clic en un botón "mostrar contratos inactivos".
Sé que es posible ocultar las fichas "inactivas" a través de una consulta. Pero mis registros se establecen directamente por varias tablas.
Aún no he establecido ninguna macro en mi base. No domino las macros en Access (pero me defiendo en Excel)
¿Es posible?
Gracias.
LH
PD: ¿conocen un sitio que explique las fórmulas del lenguaje SQL? Gracias.-
Usuario anónimoHola,
tienes la opción: o por sql, o por código.
Por código, te dejo mirar las diferentes intervenciones de este mensaje, probablemente entenderás.
Para el sql, hay que cambiar la fuente de tu formulario que muestra las "fichas"; en primer lugar, hay que crear un campo "visible" en la tabla de información de los contratos, de tipo "sí/no". Colocar un control del mismo tipo en el formulario.
Luego, en la fuente de tu formulario (en modo creación, propiedades), debes añadir este campo, y como condición poner "falso".
De esta manera, tu formulario mostrará los registros que tienen esta casilla desmarcada.
Espero que lo hayas entendido, si no, no dudes en preguntar.
Hasta luego
--
Cuando jimmy dice what’d I say, te amo bebé
Es como quien diría, toda la provincia que canta en inglés -
Laura Holt@Usuario anónimoHola HDU,
(ACCESS 2007)
Gracias por tu respuesta. Creo que he entendido el método, pero no puedo encontrar la línea "condición" en propiedades para poner "falso".
Esto es lo que he hecho:
Partí de mi base de datos ya bien llena.
Por lo tanto, creé (en su momento) en mi tabla un campo "Efectuado" de tipo "sí/no".
Fui a mi formulario, eliminé este campo "efectuado" y luego lo volví a insertar (por si acaso) a través de "agregar campos existentes".
Luego, hago clic derecho en la casilla de verificación en el formulario y accedo a las propiedades. Tengo varias pestañas: Formato, datos, evento, otros y todos. ¿Dónde debo poner "Falso"?
Gracias por tu respuesta.
LH -
Usuario anónimo@Laura HoltHola,
Tienes que poner la condición en la fuente del formulario, no en las propiedades de la casilla de verificación...
Abre tu formulario en modo creación (modificación entonces), y haz clic en Vista, propiedades.
- O bien tu formulario se basa en una consulta y tienes acceso a esta consulta en la línea 'fuente' de las propiedades (pestaña de datos, o en su defecto, todas) y modificas la consulta fuente de este formulario añadiendo el campo y poniendo la condición "falso" en la línea 'criterios'.
- O bien tu formulario se basa en una tabla, y no quieres crear una consulta, entonces, simplemente añade, en la línea 'filtro' "realizado es falso" (sin las comillas).
¿Todo claro?
¡Hasta luego!
--
Cuando jimmy dice what’d I say, I love you baby
Es como quien diría, toda la provincia que canta en inglés. -
lauraholt@Usuario anónimoGracias por tu respuesta.
Finalmente encontré la línea "filtro" en las propiedades del formulario, luego en la pestaña "datos" donde escribí Efectuado=False.
Eso funciona, pero si deseo ingresar un registro (con el filtro activo), no puedo hacer nada, todas las celdas están bloqueadas. ¿Por qué y qué hacer?
Gracias
--
LH -
Usuario anónimo@lauraholtRe,
Un filtro no debería bloquearte la entrada. ¿Puedes darme la fuente de tu formulario? ¿Puedes intentar quitar solo el filtro y decirme si funciona?
¡A+!
--
Cuando Jimmy dice "what’d I say, I love you baby"
Es como quien diría, toda la provincia cantando en inglés.
-
-
- 1
- 2
Siguiente