OptionButton.GroupName

19/12/2004 - 09:41 por Ignacio Pérez | Informe spam
Hola a todos:
Me gustaria que me echaseis una mano en un problemilla que tengo. ¿Como
averiguo la cantidad de OptionButton.GroupName que hay en un formulario para
meter los valores en una Array?.
Por mas vueltas que le doy no me hago con ello
Un saludo.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
19/12/2004 - 11:02 | Informe spam
hola, Ignacio !

...¿Como averiguo la cantidad de OptionButton.GroupName que hay en un formulario
... para meter los valores en una Array?.



siguiendo una 'secuencia logica' de eventos, te expongo la forma 'larga' [ya encontraras la forma de 'adelgazarla']
=> al inicializarse el formulario...
1.- 'barrer' TODOS los controles del formulario 'buscando' SOLO los que sean 'OptionButton'
2.- 'llenar' una coleccion con los [posibles] 'GroupNames' a los que 'pertenezca' cada control
=> en el momento en que sea necesario 'detectar' los optionbuttons 'activos' de cada grupo...
1.- 'barrer' los 'GroupNames' [y por cada grupo]...
2.- 'barrer' [nuevamente] los controles 'buscando CUAL opcion de cada grupo esta 'seleccionado'
3.- 'al tiempo' que vas 'llenando' una matriz con cada seleccion [o si ninguna esta] 'activada'

el siguiente ejemplo muestra 'el resultado' al pulsar un 'CommandButton1' en el formulario.
si cualquier duda... ¿comentas?
saludos,
hector.
en el modulo de codigo del formulario ==Dim Ctr As Control, Grupos As New Collection, Grupo As Integer, Opciones() As String
Private Sub UserForm_Initialize()
For Each Ctr In Me.Controls
If TypeName(Ctr) = "OptionButton" Then
On Error Resume Next
If Ctr.GroupName <> "" Then Grupos.Add Ctr.GroupName, CStr(Ctr.GroupName)
End If: Next
End Sub
Private Sub CommandButton1_Click(): ReDim Opciones(Grupos.Count)
For Grupo = 1 To Grupos.Count: Opciones(Grupo - 1) = "Ninguno"
For Each Ctr In Me.Controls
If TypeName(Ctr) = "OptionButton" Then
If Ctr.GroupName = Grupos.Item(Grupo) And Ctr Then
Opciones(Grupo - 1) = Ctr.Name: Exit For
End If: End If: Next: Next
For Grupo = 1 To Grupos.Count
MsgBox Grupos.Item(Grupo) & " - " & Opciones(Grupo - 1)
Next
End Sub
Respuesta Responder a este mensaje
#2 Ignacio Pérez
19/12/2004 - 15:20 | Informe spam
Muchas gracias Héctor:
Me ha llevado un rato descubrir que la linea de declaracion de las variables
se debe poner al principio del modulo. pero ya esta funcionando.
Un saludo

"Héctor Miguel" escribió en el mensaje
news:%
hola, Ignacio !

...¿Como averiguo la cantidad de OptionButton.GroupName que hay en un
formulario
... para meter los valores en una Array?.



siguiendo una 'secuencia logica' de eventos, te expongo la forma 'larga'
[ya encontraras la forma de 'adelgazarla']
=> al inicializarse el formulario...
1.- 'barrer' TODOS los controles del formulario 'buscando' SOLO los que
sean 'OptionButton'
2.- 'llenar' una coleccion con los [posibles] 'GroupNames' a los que
'pertenezca' cada control
=> en el momento en que sea necesario 'detectar' los optionbuttons
'activos' de cada grupo...
1.- 'barrer' los 'GroupNames' [y por cada grupo]...
2.- 'barrer' [nuevamente] los controles 'buscando CUAL opcion de cada
grupo esta 'seleccionado'
3.- 'al tiempo' que vas 'llenando' una matriz con cada seleccion [o si
ninguna esta] 'activada'

el siguiente ejemplo muestra 'el resultado' al pulsar un 'CommandButton1'
en el formulario.
si cualquier duda... ¿comentas?
saludos,
hector.
en el modulo de codigo del formulario ==> Dim Ctr As Control, Grupos As New Collection, Grupo As Integer, Opciones()
As String
Private Sub UserForm_Initialize()
For Each Ctr In Me.Controls
If TypeName(Ctr) = "OptionButton" Then
On Error Resume Next
If Ctr.GroupName <> "" Then Grupos.Add Ctr.GroupName,
CStr(Ctr.GroupName)
End If: Next
End Sub
Private Sub CommandButton1_Click(): ReDim Opciones(Grupos.Count)
For Grupo = 1 To Grupos.Count: Opciones(Grupo - 1) = "Ninguno"
For Each Ctr In Me.Controls
If TypeName(Ctr) = "OptionButton" Then
If Ctr.GroupName = Grupos.Item(Grupo) And Ctr Then
Opciones(Grupo - 1) = Ctr.Name: Exit For
End If: End If: Next: Next
For Grupo = 1 To Grupos.Count
MsgBox Grupos.Item(Grupo) & " - " & Opciones(Grupo - 1)
Next
End Sub

Respuesta Responder a este mensaje
#3 Héctor Miguel
20/12/2004 - 02:30 | Informe spam
hola, Ignacio !

... un rato descubrir que la linea de declaracion de las variables se debe poner al principio del modulo...



[en casos como este] si los vas a usar en varios procedimientos...
es preferible 'dejarlos como globales' ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida