Uso de variables para nombrar campos

Tengo un formulario access con 80 casillas de verificacion denominadas fac005, fac010, ... Fac400

Cada una, según esté o no marcada, tiene logicamente valor -1 o 0.

En un momento determinado necesito saber si todas las casillas valen 0.

Para evitar hacer 80 condicionales if.. Then para comprobarlo, he procedido a crear un pequeño procedimiento con un bucle que asigna en cada iteración a la variable "codigofac" el nombre de la casilla de verificación correspondiente.

Mi problema es que no puedo obtener el valor de la variable. No obtengo resultado cuando escribo:

                               if codigofac= -1 then 

                                     msgbox "Hay casilla marcada

                               end if

Eso es lógico porque codigofac vale facxxx en cada iteración. Lo que necesito es el valor del campo que representa la variable codigofac

¿Podríais indicarme como debo proceder para conseguir el valor de dicha variable?

1 respuesta

Respuesta

La forma más fácil es recorriendo los botones con For Each.

Tengo este formulario con 22 botones de opción pero solo necesito controlar el valor de los primeros 20, de tal forma que al hacer clic sobre el botón contar me registre los valores en los campos "Marcados" y "Sin Marcar". Lo hago mediante el siguiente procedimiento Al hacer clic sobre el botón Contar.

CÓDIGO DEL BOTÓN

Private Sub btnContar_Click()
Dim ctrLabel As Control
Dim intcta As Integer
Dim intSin As Integer
    Me.ctlTrue = ""
    Me.ctlFalse = ""
For Each ctrLabel In Me.Controls
    With ctrLabel
        If .ControlType = acOptionButton Then  ' acOptionButton
          If .Value = -1 And Left(.Name, 3) = "fac" Then
            intcta = intcta + 1
          Else
           intSin = intSin + 1
          End If
        End If
    End With
Next ctrLabel
 Me.ctlTrue = intcta
 Me.ctlFalse = intSin
End Sub

Observe que no incluyo los botones que dicen "No marcar". Para que  los 20 botones a incluir se validen el nombre del botón debe comenzar por la palabra "fac", es decir, fac001, fac002,...., fac020. Como muestra la figura siguiente:

Los botones que se incluyan para controlar el estado pueden tener cualquier otro nombre o ninguno, pero NO pueden comenzar con la palabra fac.

Muchas gracia Eduardo por tu rápida respuesta. Lo probaré y ya te diré.

Una corrección al código, no estaba restando los excluidos:

Private Sub btnContar_Click()
Dim ctrLabel As Control
Dim intcta As Integer
Dim intSin As Integer
Dim intExc As Integer
    Me.ctlTrue = ""
    Me.ctlFalse = ""
For Each ctrLabel In Me.Controls
    With ctrLabel
        If .ControlType = acOptionButton Then  ' acOptionButton
          If .Value = -1 And Left(.Name, 3) = "fac" Then
            intcta = intcta + 1
          Else
           intSin = intSin + 1
          End If
          If Left(.Name, 3) <> "fac" Then
            intExc = intExc + 1
          End If
        End If
    End With
Next ctrLabel
 Me.ctlTrue = intcta
 Me.ctlFalse = intSin - intExc
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas