Uso de For en VB Excel para contar opttionbuttons activados en true

Resulta que quiero revisar cuantos opttionbuttons están activados como true, como son 25 intenté usar un for para hacer el código más fácil pero el resultado siempre es 25 aún y cuando no estén activados algunos …
Ya le estuve buscando y no he podido dar con el error .
Tengo el siguiente código en un command button, A es el contador que al final se despliega en el label 46. El problema es que siempre da 25….
Private Sub CommandButton1_Click()
Dim I As Integer
Dim A As Integer
A = 0
I = 1
For I = 1 To 25
If OptionButton & I = True Then
A = A + 1
End If
Next
Label46.Caption = A
End Sub

1 Respuesta

Respuesta
2

Para reconocer cuál es el control seleccionado utiliza la comparación así:

Private Sub CommandButton1_Click()
Dim I As Integer
Dim A As Integer
A = 0
I = 1
For I = 1 To 4
    If Me.Controls("OptionButton" & I) = True Then
        A = A + 1
    End If
    Next
Label1.Caption = A
End Sub

Pero atención, que solo se selecciona un control OptionButton inhabilitando los otros, salvo que tengas la propiedad GroupName con diferentes valores.

En la siguiente imagen coloqué 3 procesos para explicarlo mejor:

El primer botón tiene la macro que mostré al inicio. El valor devuelto es por los 4 primeros.

El segundo botón, solo cuenta los option del Frame1, indicándolo en la instrucción:

Private Sub CommandButton2_Click()
Dim I As Integer
Dim A As Integer
A = 0
I = 1
For I = 5 To 8    'son option colocados en el cuadro 1
    If Frame1.Controls("OptionButton" & I) = True Then
        A = A + 1
    End If
    Next
Label2.Caption = A
End Sub

En cambio el último, cuenta todos los que se encuentran en el formulario, algunos pertenecen a un mismo grupo, otros no. Quizás este sea tu caso, donde el contador llegará hasta 25.

Cualquier duda podés solicitarme mayores aclaraciones.

Hola, excelente tu respuesta, efectivamente en mi caso los opttionbuttons están en agrupados en varios frames.. en este caso cuál sería el código del command button 3? Muchas gracias 

Lo mismo que para el primer botón pero contando el total de controles Option, en mi ejemplo son 12.

Private Sub CommandButton3_Click()
Dim I As Integer
Dim A As Integer
A = 0
I = 1
For I = 1 To 12
    If Me.Controls("OptionButton" & I) = True Then
        A = A + 1
    End If
    Next
Label3.Caption = A
End Sub

La expresión Me.Controls indica el total de controles del formulario, en cambio Frame1.Controls solo contará los que se encuentran dentro del frame con ese nombre.

Si el tema está resuelto agradeceré marques una votación desde algunos de los 2 botones que encontrarás al pie.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas