Código para desactivar campos

A ver si puedes echarme una mano cuando empece a crear cosillas con access trate de hacer un poco de contabilidad y quedo un poco cutre pero bueno era aprender,,,, bien la cuestión es que cree una tabla con campos unidades ingresos, cantidad ingreso, unidades gastos y cantidad gastos y un formulario basado en esa tabla donde están los 4 campos, rellenas ingresos o gastos pero nunca los dos aunque es posible hacerlo y las cuentas no salen ya que están en el mismo regístro, claro con el tiempo te das cuenta de que esto no debería haberlo hecho así, el problema es que no quiero modificar todas las consultas, formularios, tablas e informes y simplemente necesitaría un código para el formulario que en el momento que se ingrese (o se active el registro) una cantidad en los campos unidades ingreso o cantidad ingreso automáticamente ese desactivaran o bloquearan los campos unidades gastos y cantidad gastos y viceversa, me ahorrarías mucho trabajo y tiempo.

1 respuesta

Respuesta
1

Veamos, si en el evento Después de actualizar del campo "unidades ingreso", y suponiendo que el cuadro de texto en el formulario se llame así, le pones este código:

if Not IsNull (Me.unidades_ingreso) or Me.unidades_ingreso<>"" Then

Me.unidades_gasto.Locked=True

Me.cantidad_gastos.Locked=True

End If

También puedes usar Enabled, en vez de Locked, si prefieres que te los desactive, e

En los otros campos, tendías que poner el mismo código, pero cambiando los nombres de los controles.

Parece que el código no funciona o no lo hago bien te aclaro un poco lo que he hecho:

http://imageshack.us/photo/my-images/545/sshot1gm.png/

Tabla

http://imageshack.us/photo/my-images/801/sshot2au.png/

Campo 1: nombre:Unidades_Ingreso

Campo 2: nombre:Cantidad_Ingreso

campo 3: nombre: Unidades_Gasto

campo 4: nombre: Cantidad_Gasto

Campo 5: Formula:=Suma([Unidades_Ingreso]*[Cantidad_Ingreso])

Campo 6: Formula:=Suma([Unidades_Gasto]*[Cantidad_Gasto])

Campo 7: Formula:=((Suma([Unidades_Ingreso]*[Cantidad_Ingreso]))-(Suma([Unidades_Gasto]*[Cantidad_Gasto])))

Campo 8: Formula:=[Unidades_Ingreso]*[Cantidad_Ingreso]

Campo 9: Formula:=[Unidades_Gasto]*[Cantidad_Gasto]

inserto el código en el evento del campo 1 después de actualizar y ocurre esto:

http://imageshack.us/photo/my-images/822/sshot3jp.png/

la idea es que introduciendo una cantidad en los campos del formulario 1 y 2 se desactiven los campos 3 y 4 y al contrario pero parece que no lo consigo con el código... los campos 5,6,7,8,9 son calculados y están bloqueados.....

no se si hay un error en el código o es que soy un poquillo torpe, je, je

por cierto en el código en esta parte en concreto

Me.unidades_gasto.Locked=True
Me.cantidad_gastos.Locked=True

no hay manera de cambiarlo mayúsculas por minúsculas porque a mi me queda así:

Me.Unidades_Gasto.Locked=True
Me.cantidad_gastos.Locked=True

si las cambio, una vez hecho hago click fuera y se ponen en mayúsculas de nuevo...???

En el código hay un error, en el nombre del cuadro, pues es Cantidad_Gasto y no Cantidad_Gastos.

En cuanto a lo de las mayúsculas, no pasa nada, access te reconoce el nombre tal y como lo escribes, en tu caso en mayúsculas. Yo lo puse en minúsculas, porque en la pregunta lo ponías así, igual que el nombre (cantidad gastos) Hay que tener cuidado con los nombres, si no, pasan estas cosas.

El código para los dos campos de ingresos sería:

If Not IsNull (Me.Unidades_Ingreso) or Me.Unidades_Ingreso<>"" Then
Me.Unidades_Gasto.Locked=True
Me.Cantidad_Gasto.Locked=True
End If

Y :

If Not IsNull (Me.Cantidad_Ingreso) or Me.Cantidad_Ingreso<>"" Then
Me.Unidades_Gasto.Locked=True
Me.Cantidad_Gasto.Locked=True
End If

Para los otros dos, lo mismo, pero cambiando los nombres de los cuadros.

bueno Sveinbjorn el código por fin funciona, pero hay que cambiar True por False, de momento cumple su función pero se presentan dos nuevos problemas que creo con alguna linea mas de código se solucionara.

Problema 1: el mas grave,,,,si insertas una cantidad en cualquier campo el código cumple su función y desactiva las demás, hasta aquí bien pero si das a un nuevo registro los campos bloqueados o desabilitados (ya que cambie Locked por Enabled) siguen desabilitados y no puede hacerse la operación, osea si deshabilita la parte ingreso se queda así para nuevos registros, la idea es que al hacer un registro nuevo habilitara los 4 campos de nuevo.(si sale y entras de nuevo en el formulario se soluciona)

Problema 2: si sales del formulario y vuelves a entrar todas las operaciones registradas tienen los 4 campos activados de nuevo, aquí lo ideal seria que al entrar en el formulario el código comprobara que el campo o los campos ingresos no son nulos y mantuviese los de gastos deshabilitados y al revés claro.

he probado a cambiar el código de evento pero no obtengo el resultado bueno.

podría añadirse algo mas para que cumpliera esta funciones????

Bien, una solución a tus dos problemas sería que pusieras este otro código en el evento "Al activar registro" del formulario:

If Isnull (Me.Unidades_Ingreso) And isnull(Me.Cantidad_Ingreso) And isnull(Me.Unidades_Gasto) And isnull(me.Cantidad_Gasto) then

Me.Unidades_Gasto.Enabled=True
Me.Cantidad_Gasto.Enabled=True

Me.Unidades_Ingreso.Enabled=True

Me.Cantidad_Ingreso.Enabled=True

Exit sub

End if

If Not IsNull (Me.Unidades_Ingreso) or Not isnull(Me.Cantidad_Ingreso) Then

Me.Unidades_Gasto.Enabled=False
Me.Cantidad_Gasto.Enabled=False
Me.Unidades_Ingreso.Enabled=True
Me.Cantidad_Ingreso.Enabled=True

Else

Me.Unidades_Gasto.Enabled=True
Me.Cantidad_Gasto.Enabled=True

Me.Unidades_Ingreso.Enabled=False
Me.Cantidad_Ingreso.Enabled=False
End If

A ver si así funciona.

Sveinbjorn el tema esta resuelto tus códigos ahora van de lujo y has solucionado los dos problemas, has hecho en mi BD de un formulario mal estructurado a un formulario muy funcional ya que el problema era que se pudiesen hacer un ingreso y un gasto en el mismo registro, así los informes no daban el resultado correcto.

muchas gracias por tu ayuda, dejo el tema abierto de momento por si quieres enviarme una cabecera para ponerla en los códigos, es lo menos que puedo hacer reflejar el autor. un saludo,,, mañana lo cierro con tope de puntos, je, je...

Si quieres poner algo en el encabezado, ponle:

'Código escrito por Sveinbjorn

Pero a mí con que te haya funcionado, me es suficiente. Además, el código tampoco es para tanto... jejeje

Venga.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas