Activar frames conteniendo optionbuttons para enviar a otro userform

Estimados amigos del foro, no entiendo la razón por la que no funciona el código siguiente,

cuando uso with end with me funciona solo mostrándome el contenido del ultimo frame entonces use CASE para que en caso de estar activo uno de estos frame me muestre solo su contenido.

Para mostrar solo uno de estos frames uso otro commandbuton que hace que no hagan visibles los demás y solo quede uno que haya seleccionado, entonces ese es el CASE. Expongo el óodigo allí se encontraran con códigos que se refieren a Hechos, Conceptos, Proceso, Procedimiento, Principios y MetaCognición, estos option butons están contenidos en cada uno de lo 6 frames. El caption de cada frame es Nivel I, Nivel II, ... Nivel VI:

Private Sub CmdDefinicion_Click()
Select Case Frame
Case Me.Frame1.ActiveControl
'With Frame1.ActiveControl 'Then
frmVerTaxDef.LbNiv = Frame1.Caption
frmVerTaxDef.LbNivel = CmdVRecordar.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
'End With
Case Me.Frame2.ActiveControl
'With Frame2.ActiveControl 'Then
frmVerTaxDef.LbNiv = Frame2.Caption
frmVerTaxDef.LbNivel = CmdVComprender.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
'End With
Case Me.Frame3.ActiveControl
'With Frame3.ActiveControl 'Then
frmVerTaxDef.LbNiv = Frame3.Caption
frmVerTaxDef.LbNivel = CmdVAplicar.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
'End With
Case Me.Frame4.ActiveControl
'With Frame4.ActiveControl 'Then
frmVerTaxDef.LbNiv = Frame4.Caption
frmVerTaxDef.LbNivel = CmdVAnalizar.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
'End With
Case Me.Frame5.ActiveControl
'With Frame5.ActiveControl 'Then
frmVerTaxDef.LbNiv = Me.Frame5.Caption
frmVerTaxDef.LbNivel = Me.CmdVEvaluar.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
'End With
Case Me.Frame6.ActiveControl
'With Frame6.ActiveControl 'Then
frmVerTaxDef.LbNiv = Me.Frame6.Caption
frmVerTaxDef.LbNivel = Me.CmdVCrear.Caption
If OpBnHechos.Value = True Then
frmVerTaxDef.LbDim = OpBnHechos.Caption
ElseIf OpBnConcept.Value = True Then
frmVerTaxDef.LbDim = OpBnConcept.Caption
ElseIf OpBnProces.Value = True Then
frmVerTaxDef.LbDim = OpBnProces.Caption
ElseIf OpBnProced.Value = True Then
frmVerTaxDef.LbDim = OpBnProced.Caption
ElseIf OpBnPrinc.Value = True Then
frmVerTaxDef.LbDim = OpBnPrinc.Caption
ElseIf OpBnMetaCog.Value = True Then
frmVerTaxDef.LbDim = OpBnMetaCog.Caption
End If
Case Else
MsgBox "Debe seleccionar"
'End With
End Select

Con with funciona en parte pues solo muestra lo del ultimo frame, entonces los desactive, el frmaVerDef es otro userform al cual envío el con el botón una palabra que esta asi el codigo :

If OptionButton1.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecHechos.Value

Porque no funciona, al hacer click en el botón, si los with están desactivados , me sale esto:

1 Respuesta

Respuesta
2

No me quedo muy claro como indicas cual debe ser el frame visible. Comentas:

'... Para mostrar solo uno de estos frames uso otro commandbuton que hace que no hagan visibles los demás y solo quede uno que haya seleccionado, entonces ese es el CASE...'

Ese código no lo dejaste pero debiera guardar algún dato del frame que queda visible. Y ese dato debe colocarse en una variable publica. Y luego el otro botón tendrá las opciones del Select Case.

Por ej:

Dim nbreFrame As String
Private Sub CommandButton1_Click()
Frame1.Visible = False
Frame2.Visible = True
Frame3.Visible = False
nbreFrame = Frame2.Caption
End Sub
Private Sub CommandButton2_Click()
'segun el nro o nombre del frame será el codigo
Select Case nbreFrame
Case Is = "Nivel I"
Case Is = "Nivel II"
Case Is = "Nivel III"
End Select
End Sub

 Seguramente también se podrá simplificar las instrucciones dentro del Select porque veo instrucciones que parecen repetidas... pero empezá probando así.

Ya tenés mi correo. Si te parece que no quedó claro tu ejemplo o mi explicación podés enviármelo para que lo revise.

¡Gracias! Elsamatilde

Claro lo del botón efectivamente lo tenia casi así como lo dices, y no lo puse por no creer era necesario, y veo que si lo has entendido como lo expuse, en realidad se mejoro como lo has recomendado, solo que ciertos ajustes de resultados al inicializar el otro frmTexDef

Lo del Botón:

Frame1.Visible = False
Frame2.Visible = True
Frame3.Visible = False
Frame4.Visible = False
Frame5.Visible = False
Frame6.Visible = False
CbxCompHechos.Visible = False
CbxCompConcep.Visible = False
CbxCompProces.Visible = False
CbxCompProced.Visible = False
CbxCompPrinc.Visible = False
CbxCompMetaCog.Visible = False
OptionButton7. Visible = False

Claro te envío al correo el archivo para que lo veas, y me puedas poner una manito. Te agradezco anticipadamente.

Son muchos los errores detectados. Paso a listarlos:

Estos son los ajustes a realizar:

1 -

Selecciono 'RECORDAR' se activa el frame Nivel I

Selecciono HECHOS se muestra el combo RecHechos y el primer option.

Pero me arrepiento y decido seleccionar COMPRENER... se activa el frame Nivel II ... OK

Y como me quedó HECHOS seleccionado de la primer elección ya no me muestra el primer combo ni el primer option que necesito.

Es decir que al seleccionar los controles superiores también debes volver a false los option de la lista a la izquierda.

2 -

Si por cada Option de la lista a la izquierda (HECHOS, CONCEPTOS, PROCESOS...) solo se activa un combobox dentro del frame NO es necesario que además le agregues un optionbutton para tildar. Se pregunta si el combo está visible o si tiene valor.

3-

En Private Sub CmdVRecordar_Click()  la instrucción nbreFrame debe indicar Frame1. Caption (decia 2) y esa instrucción debe estar en todos los eventos Clic de los cuadros superiores, en cada una según el nro de Frame.

Para Private Sub CmdVComprender_Click()  será:

nbreFrame = Frame2. Caption 'se guarda el nombre del frame que se muestra

4-

Esta es la parte que se te mejorará al cambiar el pto 2 donde menciono lo del exceso de option.

Mientras, así como está las primeras 2 opciones fallan porque si Optionbutton1 está seleccionado, no lo está el OB2 y en ese caso se ejecuta esta línea (***)

'1 Recordar

If OptionButton1.Value = True Then 

frmVerTaxDef.TbxDefVerb = Me.CbxRecHechos.Value

Else

MsgBox "Debe seleccionar"

End If

If OptionButton2.Value = True Then

frmVerTaxDef.TbxDefVerb = Me.CbxRecConcep.Value

Else

MsgBox "Debe seleccionar"     (***)

End If

Lo correcto sería como lo que aparece en tu código más abajo

'1 Recordar

If OptionButton1.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecHechos.Value

If OptionButton2.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecConcep.Value

If OptionButton3.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProces.Value

If OptionButton4.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProced.Value

If OptionButton5.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecPrinc.Value

If OptionButton6.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecMetaCog.Value

5-

Hace una lista con los nombres de los controles del 2do formulario y verificá qué campos le estás pasando... se te mezclaron algunos en los distintos Case.

Con esto debiera quedar todo resuelto. Si no es así por favor valora lo hecho hasta aquí y deja una nueva consulta iniciando el mensaje con 'Para Elsa' y allí me comentas y me envias tu último libro para verificarlo.

¡Gracias! definitivamente veo que no  funciona con el select case o sera que no puedo aplicarlo. el select que me diste fue este:

'Select Case nbreFrame
'Case Is = "Nivel I"
'Case Is = "Nivel II"
'Case Is = "Nivel III"
'End Select

lo deje así:

Dim nbreFrame As String
'PARA CARGAR LOS LABELS DEL frmVerTaxDef segun el frame que se haya seleccionado
Select Case nbreFrame
Case Is = "Nivel I"  '1 RECORDAR
frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption
frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
Case Is = "Nivel II"    '2 COMPRENDER
frmVerTaxDef.LbNiv = Frame2.Caption
frmVerTaxDef.LbNivel = CmdVComprender.Caption
Case Is = "Nivel III"   'APLICAR
frmVerTaxDef.LbNiv = Frame3.Caption
frmVerTaxDef.LbNivel = CmdVAplicar.Caption
Case Is = "Nivel IV"    'ANALIZAR
frmVerTaxDef.LbNiv = Frame4.Caption
frmVerTaxDef.LbNivel = CmdVAnalizar.Caption
Case Is = "Nivel V" 'EVALUAR
frmVerTaxDef.LbNiv = Me.Frame5.Caption
frmVerTaxDef.LbNivel = Me.CmdVEvaluar.Caption
Case Is = "Nivel VI"    'CREAR
frmVerTaxDef.LbNiv = Me.Frame6.Caption
frmVerTaxDef.LbNivel = Me.CmdVCrear.Caption
'Case Else
 'MsgBox "Debe seleccionar"
'End With
End Select

pero no funciona

Entonces use el código que mencionas, que estaba correcto pero le puse lo que estaba en la instrucción select que tenia. Es bastante largo!!!

'1 Recordar
If OptionButton1.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecHechos.Value: frmVerTaxDef.LbDim.Caption = Me.OpBnHechos.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
If OptionButton2.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecConcep.Value: frmVerTaxDef.LbDim = OpBnConcept.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
If OptionButton3.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProces.Value: frmVerTaxDef.LbDim = OpBnProces.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
If OptionButton4.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProced.Value: frmVerTaxDef.LbDim = OpBnProced.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
If OptionButton5.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecPrinc.Value: frmVerTaxDef.LbDim = OpBnPrinc.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
If OptionButton6.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecMetaCog.Value: frmVerTaxDef.LbDim = OpBnMetaCog.Caption: frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption: frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption

Esto si funciono!!!!

Ahora con el ánimo de ver si hago funcionar el select, hice esto:

Dim nbreFrame As String
'PARA CARGAR LOS LABELS DEL frmVerTaxDef segun el frame que se haya seleccionado
Select Case nbreFrame
Case Case Is = "Nivel I"  '1 RECORDAR
frmVerTaxDef.LbNiv.Caption = Me.Frame1.Caption
frmVerTaxDef.LbNivel.Caption = Me.CmdVRecordar.Caption
'1 Recordar
If OptionButton1.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecHechos.Value: frmVerTaxDef.LbDim.Caption = Me.OpBnHechos.Caption
If OptionButton2.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecConcep.Value: frmVerTaxDef.LbDim = OpBnConcept.Caption
If OptionButton3.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProces.Value: frmVerTaxDef.LbDim = OpBnProces.Caption
If OptionButton4.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecProced.Value: frmVerTaxDef.LbDim = OpBnProced.Caption
If OptionButton5.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecPrinc.Value: frmVerTaxDef.LbDim = OpBnPrinc.Caption
If OptionButton6.Value = True Then frmVerTaxDef.TbxDefVerb = Me.CbxRecMetaCog.Value: frmVerTaxDef.LbDim = OpBnMetaCog.Caption

Claro solo estoy mostrando lo del primer bloque del frame1, pero es del mismo  modo los demás frames, pero,....No funcionó

El mensaje tampoco logré hacer funcionar...

Si no hay mas sugerencias respecto al select. Te agradezco mucho el apoyo que me has dado. Subiré otro tema para poder mostrar la definición según tres criterios que son los que están en el según do userform 

Envíame el libro tal como te quedó, porque me mareaste con tantos cuadros ;)

Además habia mucho código para corregir... quizás todavía falten detalles.

Sdos!

¡Gracias! Acabo de enviártelo

Y yo acabo de enviarte las correcciones y una imagen para que veas que funciona ahora con esos cambios.

Sdos!

¡Gracias! 

Lo siento!!!

frmVerTaxDef.LbNiv = nbreFrame    ' es lo mismo que Frame1.Caption 

Esto solo funciona para el frame1

Le he puesto al frame2

frmVerTaxDef.LbNiv = Frame2.Caption

asi

Case Is = "NIVEL II"

frmVerTaxDef.LbNiv = nbreFrame 

no funciona

y este mensaje

'aquí coloca el texto que corresponda a los botones 'Hechos', conceptos, etc

no le comprendo ... los caption de los optionbuttons de es estos deben trasladarse según lo que se escoja

ya están los cambios previamente indicados, solo dale por favor click al boton azul y miralo

Muy agradecido

Te faltó colocar en la variable el nombre del Frame. Esto va, como dice la instrucción, en el CLICK de cada botón superior:

En la subrutina Cmd------_Click va el nombre que corresponda al Frame.

Con respecto al nombre de los botones en el mensaje, la instrucción original decía:

'Falta seleccionar' sin mencionar dónde falta seleccionar.

Y se me ocurrió que al usuario le sería más claro si el mensaje saliera así:

"Debe seleccionar un botón de opción de la DIMENSION DEL CONOCIMIENTO"

Sdos!

Gracias por la paciencia

Ahora funciona hasta el frame 3, no comprendo la razón por la cual solo funciona hasta el tercer botón superior. A partir del 4 ya no funciona. 

Desde el botón 1 hasta el 6 tengo lo que me indicas

y en los Case, tengo igualmente como lo indicas desde el I hasta el VI

Funciona hasta el III

Todo lo demás esta igual, que cosa le falta??

Por favor podría echarle in vistazo??

Gracias por la paciencia

Creo que te estas olvidando que el texto de los caption está en mayúsculas... revisa los 'Case' anteriores y así debes colocarlos en estos que te faltan.

Sdos!

¡Gracias! Ahora me he convencido en el uso del Select Case funciona bien, en esto veo que es muy estricto (minúscula o mayúscula, etc) lógica, orden secuencia. Te quedo muy agradecido esta funcionando bien,

Me ratifico en la gratitud por mantener el hilo, y la paciencia que me has tenido, ha valido la pena llegar a resolver este tema, me ha enseñado mucho. Hasta la próxima!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas