¿Cómo desactivar un optionbutton mediante una instrucción?

Quisiera saber si me pueden ayudar con el siguiente tema: tengo un formulario con 3 optionbutton (con valores "PIF", "CDP" "VALUACIÓN") los cuales quiero que se activen o desactiven de acuerdo a un criterio de búsqueda. Actualmente uso mi formulario1 para seleccionar de un combo una clave de proyecto, después en un textbox capturo algunos datos adicionales y al final selecciono alguno de los 3 optionbutton o una combinación de los 3 dependiendo del caso que se trate (puedo seleccionar el "PIF", " CDP", o "VALUACIÓN" o alguna combinación de "PIF" Y "CDP" o "PIF" y "VALUACIÓN", etc). Al final tengo un botón para "Guardar" mi registro en una hoja de excel (Recomendación). El valor de la clave de proyecto me lo guarda en la columna "A", el valor del textbox en la columna "B" y los valores de los option button los gurarda en la "C"; para este caso, me registra el nombre del botón seleccionado, por ejemplo: si seleecione "PIF" en la columna C aparece "PIF" y si seleccioné "PIF" y "CDP" en la columna C me aparece "PIF / "CDP".

Eso es como funciona hoy y en lo que estoy trabajando es que cuando en el formulario1 seleccione una clave de proyecto del combo y si esta ya existe en la hoja "Recomendación", me arroje en el textbox los datos que se capturaron en la columna A y que se activen los optionbutton según la información de la columna C, es decir, si ya existe el proyecto y en la columna C tengo "PIF" / "CDP" en el formulario se deberán activar los botones de "PIF" y "CDP" e ir cambiando de acuerdo a cada proyecto. Esta parte ya la tengo también pero no he podido hacer que al cambiar de un registro existente a uno inexistente en la hoja "Recomendación", todos los optionbutton queden en blanco ya que me deja activados los botones del último registro existente que se consultó, pero si de inicio busco el proyecto en mi combo y si este no existe en la hoja 1 si se quedan en blanco todos mis buttons. Pongo el Código que estoy usando:

If Application.WorksheetFunction.Lookup(combobox51.value, Range("hoja1!A:A")) = combobox51.value Then

TextBox53.Text = Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:B"), 2, 0)

If Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "PIF" Then
OptionButton11 = True
OptionButton12 = False
OptionButton13 = False
ElseIf Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "CDP" Then
OptionButton12 = True
OptionButton11 = False
OptionButton13 = False
ElseIf Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "VALUACIÓN" Then
OptionButton13 = True
OptionButton12 = False
OptionButton11 = False
ElseIf Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "CDP / VALUACIÓN" Then
OptionButton13 = True
OptionButton12 = True
OptionButton11 = False
ElseIf Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "PIF / VALUACIÓN" Then
OptionButton13 = True
OptionButton12 = False
OptionButton11 = True
ElseIf Application.WorksheetFunction.VLookup(combobox51.value, Range("Recomendación!A:C"), 3, 0) = "PIF / CDP" Then
OptionButton13 = False
OptionButton12 = True
OptionButton11 = True
ElseIf Application.WorksheetFunction.Lookup(combobox51.value, Range("Recomendación!A:A")) <> combobox51.value Then
OptionButton11 = False And OptionButton12 = False And OptionButton13 = False

2 Respuestas

Respuesta
2

Me gustaría que subas una imagen de tu formulario. Creo que estás confundiendo los optionbutton con los checkbox que te permiten seleccionar más de 1 opción por cada grupo.

De todos modos, revisa la última instrucción y dejala de este modo reemplazando el 'and' por 2 puntos.

OptionButton11 = False : OptionButton12 = False :OptionButton13 = False

Excelente Elsa!!

También probé tu solución con mi código actual y me funcionó bien!

Saludos y muchas gracias

Respuesta
1

Te anexo la macro actualizada.

Cambié la forma de buscar por el método .Find

También cambié los If's por un Case, me parece que es más práctico y también le da más claridad al código.

Para limpiar los optionbutton se deben limpiar la inicio del código; y después activar los necesarios:

Private Sub ComboBox51_Change()
'Act Por Dante Amor
    OptionButton11 = False
    OptionButton12 = False
    OptionButton13 = False
    '
    'buscar el dato
    Set h = Sheets("Recomendación")
    Set b = h.Columns("A").Find(ComboBox51.Value, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        TextBox53.Text = h.Cells(b.Row, "B").Value
        Select Case h.Cells(b.Row, "C").Value
            Case "PIF"
                OptionButton11 = True
            Case "CDP"
                OptionButton12 = True
            Case "VALUACIÓN"
                OptionButton13 = True
            Case "CDP / VALUACIÓN"
                OptionButton12 = True
                OptionButton13 = True
            Case "PIF / VALUACIÓN"
                OptionButton11 = True
                OptionButton13 = True
            Case "PIF / CDP"
                OptionButton11 = True
                OptionButton12 = True
        End Select
    End If
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¡Muchas Gracias! 

Me parece más sencilla y entendible la forma en que me pones el código, lo probé y me funcionó muy bien.

Saludos y Muchas gracias de nuevo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas