Formato condicional para botón de comando

Estoy diseñando un formulario en el que hay varios botones de comando. Quiero que algunos sólo estén disponibles si un campo del registro actual cumple unos requisitos (algo así como el botón "Pegar" de la barra de herramientas de los programas de Office, que sólo está activo si hay algo en el portapapeles). Según la ayuda de access, eso se puede hacer con "Formato>Formato condicional", ya que dicen que se puede aplicar un formato condicional a cualquier control (según mi experiencia, sólo se puede aplicar a cuadros combinados). Sabes cómo puedo hacerlo, ¿o algún truco para ocultar el botón si hay un valor determinado en un campo?

3 Respuestas

Respuesta
1
Efectivamente, el Formato condicional no es aplicable a un Botón de comando. Para hacer que determinados controles estén disponibles bajo determinadas condiciones, lo mejor es acudir a la propiedad Enable (Activado) y a los dos estados que puede tomar, Si - No, o a la propiedad Visible, también con uno de esos dos estados Si - No.
Un ejemplo de esto lo puedes encontrar en Pedidos.mdb (de la access 97) y en su form Pedidos, el código viene a decir algo como esto:
Private Sub Form_Current()
' Si el pedido no tiene un cliente, no permitir al usuario modificar los
' controles de información del cliente.
On Error Resume Next
Const conBorrar = 0
' Desactivar y bloquear el control IdCliente.
' Mostrar el control IdCliente con el mismo fondo que su sección
' y sin borde, para que no se vea como un control modificable.
IdCliente.Enabled = False
IdCliente.Locked = False
IdCliente.BorderStyle = conBorrar
' Si el pedido no tiene asignado un cliente, desactivar los controles del cliente.
' El usuario debe seleccionar un cliente antes de modificar la información del cliente.
If IsNull(FacturarA) Then
On Error Resume Next
IdCliente.Enabled = False
IdCliente.Locked = False
NombreCompañía.Enabled = False
Dirección.Enabled = False
Ciudad.Enabled = False
Región.Enabled = False
CódPostal.Enabled = False
País.Enabled = False
NombreContacto.Enabled = False
CargoContacto.Enabled = False
Teléfono.Enabled = False
Fax.Enabled = False
Me!SubformularioPedidos.Enabled = False
Me!SubformularioPedidos.Locked = True
' Si el pedido tiene un cliente asignado, activar los controles del cliente.
Else
IdCliente.Enabled = True
IdCliente.Locked = True
NombreCompañía.Enabled = True
Dirección.Enabled = True
Ciudad.Enabled = True
Región.Enabled = True
CódPostal.Enabled = True
País.Enabled = True
NombreContacto.Enabled = True
CargoContacto.Enabled = True
Teléfono.Enabled = True
Fax.Enabled = True
Me!SubformularioPedidos.Enabled = True
Me!SubformularioPedidos.Locked = False
End If
With Me
If FechaEnvío < Date Then
.AllowDeletions = False
.AllowEdits = False
!SubformularioPedidos.Enabled = False
!SubformularioPedidos.Locked = True
!Detalles.Enabled = False
Else
.AllowDeletions = True
.AllowEdits = True
!SubformularioPedidos.Enabled = True
!SubformularioPedidos.Locked = False
!Detalles.Enabled = True
End If
End With
End Sub
Muchas gracias.Lo pruebo y mañana te cuento
Al final he conseguido lo que quería. Se me hizo un poco complicado adaptar el código que me enviaste, pero con la idea esta de anular el botón con el "If" y en "Form_Current", me pusiste en el buen camino. Gracias!
Respuesta
2
Cuando te mueves por los registros, se produce un evento. Este evento se llama "Current" ("Al activar registro" desde la ventana de propiedades, el primero de todos en Access97), de modo que tienes un control total sobre lo que pasa en el formulario, en función del contenido de los campos, programando ese evento. Lo "malo" es que requiere un poquito de código.
Por ejemplo, más concretamente lo que tu quieres hacer, suponiendo que tu requisito sea "que campo1 sea mayor que 10" el código asociado al formulario quedaría así:
Private Sub Form_Current()
If campo1 > 10 Then
Boton_Ocultable.Enabled = False
Else
Boton_Ocultable.Enabled = True
End If
End Sub
En este ejemplo deshabilito o habilito un botón, pero lógicamente, nada impide que escribas ahí las instrucciones que quieras, o con la condición que quieras, dependiendo de tantos campos como necesites.
Respuesta
1
Suponemos que tenemos un botón llamado comando4. En el evento change del campo en cuestión pones algo similar a esto:
if me.nombre_campo_en_cuestion > 100 then
'para ocultar
me.comando4.visible = false
'o pon esto
me.comando4.enabled = false
else
me.comando4.visible = true
'o
me.comando4.enabled = true
end if
Debes adaptar este código a tu condición que este caso es para cuando el campo sea mayor que 10 y poner los nombres correctos de los campos y objetos.
Un saludo. Pruébalo y me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas