• No se han encontrado resultados

Activar o desactivar Checks

In document Ejercicio Final. P.L. Fernández (página 40-44)

Una vez habilitados los CheckBox con la propiedad Enabled, es hora de activar o desactivarlos con la propiedadValue. Para ello se utiliza un condicional para evaluar el valor True o False y actuar en consecuencia. Entonces se entra en el eventoClick del CheckBox y se comienza el

condicional llamando al procedimiento que se utilizó para mostrar el país en la Tabla Dinámica.

Private Sub CheckAlemania_Click()

If CheckAlemania.Value = True Then

Call Filtro_tabladinamica("ALEMANIA", True)

Ahora hay que introducir una línea para el caso de que se quiera desactivar, por lo que se introduce un Else, ya que sólo hay dos posibilidades,

Else

Call Filtro_tabladinamica("ALEMANIA", False)

End If

Con esto ya se podría mostrar u ocultar el país en la Tabla Dinámica y pegarlo en cada uno de los CheckBox, pero ¿qué pasaría si todos los CheckBox

están desactivados? Pues que el programa se caería ya que siempre debe haber un CheckBox activo. Entonces en el Else de cada CheckBox hay que imponer una condición de que únicamente si hay, al menos, un CheckBox

activo se pueda desactivar el CheckBox del país. Pero claro ¿cómo se cuentan cuántos CheckBox activos hay?

Así de primeras es un poco difícil de imaginar, pero se puede crear un

procedimientoFunction, en un nuevo módulo, que devuelva un número con los CheckBox activos y hacer una llamada a él en cada Else del país. En este procedimiento Function se va a crear una variable llamada N_Checks cuyo valor inicial va a ser 10. Entonces si un CheckBox está deshabilitado o

desactivado se le resta una unidad a la variable N_Checks y esto se consigue mediante un condicional.

Function numero_checks() As Integer

'Procedimiento function sin parametros a introducir cuando se le llame () y se define el resultado como entero

Dim N_checks As Integer

N_checks = 10 ' El número total de paises es 10 If Formulario.CheckAlemania.Value = False Or

Formulario.CheckAlemania.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckCanada.Value = False Or

Formulario.CheckCanada.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckEspana.Value = False Or

Formulario.CheckEspana.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckEspana.Value = False Or

Formulario.CheckEspana.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckFrancia.Value = False Or

Formulario.CheckFrancia.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckFrancia.Value = False Or

Formulario.CheckFrancia.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckItalia.Value = False Or

Formulario.CheckItalia.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckJapon.Value = False Or

Formulario.CheckJapon.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckReinoUnido.Value = False Or

Formulario.CheckReinoUnido.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckSuecia.Value = False Or

Formulario.CheckSuecia.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

If Formulario.CheckTaiwan.Value = False Or

Formulario.CheckTaiwan.Enabled = False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

If Formulario.CheckUsa.Value = False Or Formulario.CheckUsa.Enabled =

False Then 'si es falso se le resta un número al total de checks

N_checks = N_checks - 1

End If

Ahora hay que igualar el valor de la variable N_Checks después de todos los condicionales al procedimientoFunction. Por último, se cierra el

procedimiento.

numero_checks = N_checks

End Function

Entonces ahora se introduce el valor en el Else con un nuevo condicional

anidado. Se dice que si el valor devuelto por el procedimiento

Numero_Checks es mayor o igual que uno, entonces sí puede desactivar el

CheckBox del país, s ino, es decir si es 0, entonces en un nuevo Else del

condicional anidado, se muestra un MsgBox diciendo que no tiene que haber al menos, un check activado y devolviendo el valor del CheckBox del país a

True y se cierran los dos condicionales.

Private Sub CheckAlemania_Click()

If CheckAlemania.Value = True Then

Call Filtro_tabladinamica("ALEMANIA", True)

Else

If numero_checks >= 1 Then

Call Filtro_tabladinamica("ALEMANIA", False) Else

MsgBox ("Tiene que haber al menos un check activo." & vbCrLf & "Se quedará el filtro activo")

CheckAlemania.Value = True End If

End Sub

El código anterior hay que repetirlo en cada uno de los eventosClick de los

CheckBox de los países cambiando las variables necesarias.

Figura 31: Mensaje de advertencia

In document Ejercicio Final. P.L. Fernández (página 40-44)

Documento similar