Usar varias CheckBox en una macro de excel

He diseñado una macro en Excel para que se pueda filtrar información de una tabla a través de diferentes CheckBox. Concretamente se trata de filtrar la columna que contiene siete países, por lo que he habilitado siete CheckBox, uno por país. De esta manera el usuario haciendo clic en cada uno puede seleccionar los países que quiera y la tabla mostrara la información solo de esos países.
Aparentemente parece sencillo, pero el problema es que tengo que programar todas las posibles combinaciones de los check box, ademas teniendo en cuenta que el CheckBox puede ser True o False.
Para ello he utilizado en el caso de selecciones de 1 o 2 países, he utilizado la siguiente formulación como ejemplo:
If CheckBox1.Value = True Then
      'Solo Spain y SouthAfrica seleccionados
    If CheckBox1.Value = True And (CheckBox2.Value = True) And (CheckBox3.Value = False) And (CheckBox4.Value = False) And (CheckBox5.Value = False) And (CheckBox6.Value = False) And (CheckBox10.Value = False) Then
     TablaDatos.AutoFilter Field:=71, Criteria1:="=South Africa", _
        Operator:=xlOr, Criteria2:="=Spain"
    End If
etc.....
Y para el caso de más de tres países he utilizado la formulación de autofiltro avanzado, teniendo que crear los diferentes rangos según la combinación de los países:
'Solo Spain y SouthAfica y Portugal seleccionados
    If CheckBox1.Value = True And (CheckBox2.Value = True) And (CheckBox3.Value = True) And (CheckBox4.Value = False) And (CheckBox5.Value = False) And (CheckBox6.Value = False) And (CheckBox7.Value = False) Then
     TablaDatos.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("D1:D4"), Unique:=False
    End If
Donde en el rando D1:D4 estaban los criterios de los países.
El problema esta en que tengo que programar 127 combinaciones por país, ya que cada click en cada CheckBox necesita una respuesta programada.
Mi pregunta es: ¿Se puede hacer esto de otra manera más sencilla?
2

2 Respuestas

566.650 pts. Desarrollador de aplicaciones en plataforma
Creo que tienes mal enfocado el problema, pregunta por los 7 checkbox si están seleccionados, independiente que si están no o los otros seis, al final si el criterio es vacío es porque no esta seleccionado ese checkbox.
Muchas gracias por contestar tan rapido,
no soy muy experto en el tema, pero ¿me podrías poner un ejemplo con el código?. Según tu sugerencia ¿tendría qué también utilizar el filtro avanzado indicando en cada caso el rango de los países a utilizar en función de las selecciones de los CheckBox?.
Gracias de nuevo y un saludo.
Defines los criterios :
Criteria1, criteria2, criteria3, criteria4, criteria5, criteria 6, criterioa7
If CheckBox.Checked=true then
criteria1= "algo"
End If
If CheckBox2.Checked = true Then
criteria2 = "algo"
End If
... y asi sucesivamente y no haces esos filtros tan complejos que no son necesarios
Muchas gracias,
según lo planteas es realmente sencillo, pero no consigo que funcione. Si cada CheckBox es para que la tabla de datos quede filtrada en función del país seleccionado entonces el criterio a aplicar si es true seria un filtro sencillo, por ejemplo:
    TablaDatos.AutoFilter Field:=7, Criteria1:="=Spain"
Lo que no entiendo es que cuando hay varios CheckBox seleccionados, ¿cómo es la macro capaz de decirle a excel que filtre la tabla en función de los diferentes CheckBox al mismo tiempo?
Perdona que no lo vea con la sencillez que lo planteas, pero como te comente no tengo mucha experiencia en programación. ¿Dónde crees que me estoy equivocando?
¿Cómo filtras cuando son varios países?
Allí es donde lo debes hacer, es simplemente verificar Si criterio1 no es "" entonces lo incluyes dentro del criterio del filtro es así de sencillo
0 pts.
Para evitar tanta combinación hazlo de esta manera..
Lo que se hace aque es que cada ves que das click te deja visible la fila donde esta ese país, es decir si le das clic a estados unidos te lo deja b}visible si no te oculta la la fila
Selection.EntireRow.Hidden = True
Else
Range("a5").Select
Selection.EntireRow.Hidden = False
End If
End Sub
Private Sub CheckBox6_Click()
If Me.CheckBox6 = False Then
Range("a6").Select
Selection.EntireRow.Hidden = True
Else
Range("a6").Select
Selection.EntireRow.Hidden = False
End If
End Sub
Private Sub CheckBox7_Click()
If Me.CheckBox7 = False Then
Range("a7").Select
Selection.EntireRow.Hidden = True
Else
Range("a7").Select
Selection.EntireRow.Hidden = False
End If
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Click()
End Sub
Hola, con tu idea lo he planteado de otra manera y funciona perfectamente. Ahora al hacer click en el CheckBox se esconden o no las lineas de toda la tabla según el criterio. Muchas gracias. El código es el siguiente:
If Me.CheckBox1 = False Then
    Range("G10").Select
    Do While Not IsEmpty(ActiveCell)
    If ActiveCell.Value = "Spain" Then
    ActiveCell.EntireRow.Hidden = True
    End If
    ActiveCell.Offset(1).Select
    Loop
Else
    Range("G10").Select
    Do While Not IsEmpty(ActiveCell)
    If ActiveCell.Value = "Spain" Then
    ActiveCell.EntireRow.Hidden = False
    End If
    ActiveCell.Offset(1).Select
    Loop
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas