Cómo cambiar valores a "MUCHOS" Grupo de opciones a valores tipo texto y que se quede marcada la opción

Tengo un formulario con grupos de opciones. En lugar de guardar en el campo los valores 1, 2, 3,... He conseguido modificarlo y que guarde los valores tipo texto que quiero con este código:

Private Sub Marco1_FormCurrent()
Dim Valor
Select Case Me.Marco1
Case 1
Valor = "Bien"
Case 2
Valor = "Regular"
Case 3
Valor = "Mal"
End Select
Me.Campo= Valor
End Sub

Al navegar por los registros del formulario (adelante y atrás), las casillas del marco no se quedaban marcadas por lo que generé este código:

Private Sub Form_Current()
Dim Valor2 As String
Valor2=Nz(Me.Campo,"")
Select Case Valor2
Case "Bien"
Me.Marco1 = 1
Case "Regular"
Me.Marco1 = 2
Case "Mal"
Me.Marco1 = 3
Case Else
Me.Marco1 = Null
End Select
End Sub

El problema que tengo es que en el formulario tengo muchos marcos de grupos de opciones, estoy hablando de unos 30 y hacer todo esto para cada uno de ellos me resulta muy pesado.

¿Hay otra manera de hacerlo o alguna forma de simplificarlo?

2 Respuestas

Respuesta
1

Al parecer y por el Código, pones todos los Controles, que según veo son Grupos de Opciones, con el mismo valor. Ignoro el significado pero prueba de hacer un Bucle ..

Al principio del Formulario, después del Option Compare... y del Option Explicit declara una Variable:

Dim Ctrl As Access.Control

For Each Ctrl In Me.Controls
   If Ctrl.ControlType = acOptionGroup And Left(Ctrl.Name, 5) = "Marco" Then
    Select Case Valor2
        Case "Bien"
            Ctrl.Value = 1
        Case "Regular"
            Ctrl.Value = 2
        Case "Mal"
            Ctrl.Value = 3
        Case Else
            Ctrl.Value = Null
    End Select
   End If
Next Ctrl

No lo he probado y lo he ido escribiendo sobre la marcha. Un saludo >> Jacinto

Pero donde lo tengo que poner? He probado en el evento "al activar el registro" y no funciona. Se quedan marcadas las opciones del último registro que meto.

La verdad es que sigo sin tener claro elproceso, por lo que las posibilidades de acierto son escasas.

No obstante y viendo que en el código hay un Control que se llama >>Campo, programa el evento AfterUpdate de ese control con algo como ésto.

Private Sub Campo_AfterUpdate()
Dim Valor2 As String
Valor2 = Nz(Me.Campo,"")
For Each Ctrl In Me.Controls
   If Ctrl.ControlType = acOptionGroup And Left(Ctrl.Name, 5) = "Marco" Then
    Select Case Valor2
        Case "Bien"
            Ctrl.Value = 1
        Case "Regular"
            Ctrl.Value = 2
        Case "Mal"
            Ctrl.Value = 3
        Case Else
            Ctrl.Value = Null
    End Select
   End If
Next Ctrl
End Sub

Un saludo >> Jacinto

Respuesta

Que conste que no he entendido nada, pero si tengo una tabla

Y tengo un formulario(pongo los cuatro grupos de opciones, más sería trabajar demasiado)

Si pulso el botón

El código del botón es

Private Sub Comando39_Click()
For Each Control In Form.Controls
If Control.ControlType = acOptionGroup Then
Dim valor
Select Case Control
Case 1
valor = "Bien"
Case 2
valor = "Regular"
Case 3
valor = "Mal"
End Select
Control.Value = valor
End If
Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas