** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Contar los CheckBox que doy Check
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Contar los CheckBox que doy Check

 Responder Responder
Autor
Mensaje
RobertoCarlos Ver desplegable
Habitual
Habitual


Unido: 12/Marzo/2013
Localización: Bolivia
Estado: Sin conexión
Puntos: 168
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita RobertoCarlos Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Contar los CheckBox que doy Check
    Enviado: 15/Junio/2022 a las 22:44
Muy buenas tardes, espero estén muy bien
Aquí un reto para mi tal vez un segundo para mas de uno en este Foro

Estoy queriendo ingresar datos de manera fácil desde un formulario, es un pequeño control de pagos de un colegio para ello ya hice mi formulario, ahora hago unos filtros y me trae al alumno y me pone check en los checkbox que tiene el mes pagado por ejemplo si el alumno pago Febrero al cargar los datos se me cargar y se pone Check en el control lo verán a continuación.
Ahora mi problema radica en por ejemplo el alumno debe pagar 10 mensualidades a lo largo del año y si yo quiero pagar Marzo por ejemplo doy check en el CheckBox de Marzo y si quiere pagar Abril también y así con los otros meses pero ahora me gustaría ir capturando los datos en un array para luego completo pasarlo a la hora de excel.
Pero ahí es cuando comienza mi problema no se como hacerlo ya vi diferentes maneras pero ninguna se acerca a mi necesidad.


Por ejemplo mis campos en excel son estos
Fecha NumeroRecibo Estudiante Mes Monto
me gustaría que en memoria me cree ese arreglo con filas y columnas para después con un botton pasarlos a la hoja.
pero por ejemplo si pago hasta Julio, me tocaría agosto y septiembre o los meses que quiera pagar 
por ejemplo si quiere pagar solo Julio que mi arreglo tenga una fila con todas esas columnas y si quiere pagar dos meses que tenga dos filas 
mis imágenes
Por ejemplo esta es la imagen cuando inicio el form prácticamente vacío

Bueno no pude subir mis imágenes.


Agradezco la colaboración



Roberto
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 15/Junio/2022 a las 23:35
Perdona pero te complicas bastante (tal vez para hacerlo más bonito?) con cosas que son más fáciles de hacer directamente en celdas.

Para lo que pides puedes tener una celda (lejos donde no estorbe) que cada vez que «des check» incrementes dicha celda y luego uses ese valor para los cálculos que necesites. 

Te recuerdo que una celda (o varias) es la mejor memoria que tenemos en Excel, tanto para lo que pides ahora (no se borra aunque cerremos el libro) como para variables fijas o temporales, incluso matrices de varias dimensiones.


Saludos desde Tenerife.
Arriba
RobertoCarlos Ver desplegable
Habitual
Habitual


Unido: 12/Marzo/2013
Localización: Bolivia
Estado: Sin conexión
Puntos: 168
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita RobertoCarlos Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 01:33
De antemano muchas gracias, y Sí, así lo estuve haciendo por ejemplo hice algo que cuando doy check se me pinte en una celda lo que tengo en el Tag de ese checkbox, pero, que pasa si el usuario dio check por error y luego decide que ya no quiere o no tenia que dar check en ese mes como lo quito
 
Roberto
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 09:57
Para eso sirven los condicionales: si la casilla cambia a VERDADERO sumas 1, si la casilla cambia a FALSO restas 1, y como la casilla no tiene más estados... problema resuelto. 

Pero no me refería a 'eso', si los datos los tienes en celdas pagados y no pagados; simplemente sumas o cuentas y con ello (quites o pongas) el cálculo siempre será el correcto peeero... (como se suele decir) «cada maestrillo tiene su librillo», es decir: si tu te sientes más cómodo con tu sistema... adelante que para ello Excel ofrece tantas opciones como ofrece, yo simplemente te comparto mi opinión, que no es (con mucho) ni la mejor ni la única.




Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 10:14
El problema de la comunicación a distancia, es que no podemos ver: lo que tiene el otro (tú) o a lo que se refiere el otro (yo). 

Dices que lo tienes con un formulario, ¿Que tipo de formulario?, ¿Es el formulario integrado?, ¿Es un USERFORM de VBA?  

(Para poder intentar ayudarte mejor) Sería interesante alguna imagen.

Editado: ¡Perdona!, no me había fijado que estás teniendo problemas para subir las imágenes. Embarrassed




Editado por AnSanVal - 16/Junio/2022 a las 10:39
Saludos desde Tenerife.
Arriba
RobertoCarlos Ver desplegable
Habitual
Habitual


Unido: 12/Marzo/2013
Localización: Bolivia
Estado: Sin conexión
Puntos: 168
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita RobertoCarlos Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 14:18
Buen día, subiré las imágenes, por favor como debo hacer eso porque ya las subí a una página me dio el link pero me dice error al intentar vista previa

Gracias
Roberto
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 14:44

Desde un Formulario VBA (es un poco mas laborioso) podría ser como el siguiente.




Este es un ejemplo sencillo para tres meses (el código vale para los que necesites), constrúyelo y juega con él para que veas lo que hace, y si te vale adáptalo a tu caso real.


Mi ejemplo consta de:

UserForm1 , Frame1 (contenedor de las casillas), CheckBox1, CheckBox2, CheckBox3 y Label1



Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 14:57
RobertoCarlos: «... subiré las imágenes, por favor como debo hacer eso...»

Yo las subía a OneDrive y no tenía problemas para vincularlas, pero después de que actualizaron al nuevo formato no he logrado hacerlo. La verdad no lo intenté mucho, como no tengo problemas desde mi sitio web, pues lo hago desde allí. Approve

Pero si puedes (es más fácil) en vez de vincular la imagen, pega aquí directamente el enlace para su descarga, o incluso sólo el texto del enlace.


Saludos desde Tenerife.
Arriba
RobertoCarlos Ver desplegable
Habitual
Habitual


Unido: 12/Marzo/2013
Localización: Bolivia
Estado: Sin conexión
Puntos: 168
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita RobertoCarlos Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Junio/2022 a las 16:51
AnSanVal  doy gracias a Dios por tu sabiduría. y gracias por colaborarme, conforme a lo indicado para subir imágenes, he conseguido subirlas al dropbox, 
las pasare en orden para que veas
en la primera es cuando ejecuto el formulario 
https://www.dropbox.com/s/d9d96jtoy0nbslr/1.png?dl=0

En la segunda es cuando busco un estudiante y con el botón cargar cargo los datos de ese estudiante al formulario, datos que vienen de la hoja de cálculo.
https://www.dropbox.com/s/anhc301t1v1tnni/2.png?dl=0
y la tercera es cuando el estudiante me dice quiero pagar en la imagen se ve que quiere pagar Mayo Junio y Julio el que esta con el recuadro verde en la imagen.
los que están con el recuadro rojo, ya no se puede quitar el check porque están bloqueados, y los que estan sin el check son mensualidades que el estudiante debe.
https://www.dropbox.com/s/f1qn64egu1ta37a/3.png?dl=0

Ahora bien cuando yo hago Check por ejemplo en Junio el con este código en el evento click 
Private Sub ChkNoviembre_Click()
If ChkNoviembre Then

Dim fila As Integer
fila = 1
While Cells(fila, 39) <> ""
fila = fila + 1
Wend
Hoja12.Cells(fila, 39) = TxtFecha.Value
Hoja12.Cells(fila, 40) = TxtRecibo.Value
Hoja12.Cells(fila, 41) = CboEstudiantes.Value
Hoja12.Cells(fila, 42) = TxtCurso.Value
Hoja12.Cells(fila, 43) = ChkNoviembre.Tag
Hoja12.Cells(fila, 44) = 20
Hoja12.Cells(fila, 45) = CboTipoMovimiento.Value

End If


End Sub
me agregar a una fila que esto me funciona bien, es decir carga los datos
ahora bien el usuario del sistema se apresuro y hizo check en septiembre y el estudiante le dijo no. solo pagare hasta agosto entonces como ya está check debo quitar el check para que se quite la fila que se agrego para ello hice este otro codigo en el evento change
Private Sub ChkNoviembre_Change()
If ChkNoviembre.Value = False Then
Sheets("Pagos").Select
col = "AQ"
texto = ChkNoviembre.Tag
Valor = texto
If IsNumeric(texto) Then Valor = Val(texto)    '
Application.ScreenUpdating = False
For i = Range(col & Rows.Count).End(xlUp).Row To 1 Step -1
If LCase(Cells(i, "AQ")) = LCase(Valor) Then
f1 = i
Sheets("Pagos").Range("AM" & f1, "AS" & f1).Delete Shift:=xlUp
End If
Next

End If
End Sub

que también lo quita, 

Mi próxima pregunta sería, como lo puedo mejorar este código por favor, creo que el funciona pero creo que esta muy artesanal 

Perdón edito
por ejemplo uno de los problemas que veo es que en cada checkbox tendría que ir el código y son 10 meses de febrero a noviembre, y en ambos eventos
En febrero el código del click y el código del change
en marzo lo propio y creo que habría mucho código

Muchas gracias


Editado por RobertoCarlos - 16/Junio/2022 a las 16:55
Roberto
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Junio/2022 a las 11:45
 

RC: «... uno de los problemas que veo es que en cada checkbox tendría que ir el código y son 10 meses de febrero a noviembre, y en ambos eventos. En febrero el código del click y el código del change en marzo lo propio y creo que habría mucho código...»


ASV: Sí, eso es innecesariamente repetitivo, pero fíjate en el código que te compartí: el código de acción está sólo una vez (Private Sub pagos)  y los eventos Change de las casillas (son necesarios) solo contienen su llamada a la subrutina pagos.


En  tu caso tendrás que adaptar a:

Option Explicit  ' es importante; estas declaraciones con alcance general.

Dim totP#, mensual#, cnt As Object 'totalPagado, cuota y (cada)control.


Private Sub ChkFebrero_Change()

  pagos

End Sub

. . .

Private Sub ChkNoviembre_Change()

  pagos

End Sub


Private Sub pagos()

  totP = 0

  For Each cnt In Me.Controls

    If Left(cnt.Name, 3) = "Chk" Then

      If cnt.Value Then totP = totP + 1

    End If

  Next cnt


'En vez de poner totalPagado en la etiqueta, lo pondrás en C.Pagadas.

  UserForm1.Label1.Caption = "Total pagos: " & Abs(totP)

End Sub



NOTA: Es muy importante que otros controles (que no sean casillas de verificación) del formulario, su nombre NO sea «Chk???» y que el formulario no contenga más casillas que las de los meses (con esto parece que no hay problemas).



Editado para aplicar espacios entre párrafos. Recuerda comentar si has resuelto, para cerrar el hilo.
Editado 2: He modificado para que totP sea el conteo de pagadas (no necesitarías mensual).



Editado por AnSanVal - 17/Junio/2022 a las 12:43
Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5976
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Junio/2022 a las 13:01


Hola de nuevo.


(1) ► ASV.- En el evento Click de Noviembre (supongo cualquier mes) el bucle no es necesario, para que fila apunte a la primer fila libre, lo puedes hacer con...

    fila = Cells(Rows.Count, 39).End(xlUp).Offset(1).Row

... , de todos modos es preferible llamar a una subrutina común para cualquier mes, o mejor aún, como indico en el siguiente punto.


(2) RC.- «... el usuario del sistema se apresuró e hizo check en septiembre y el estudiante le dijo no, solo pagaré hasta agosto, entonces como ya está check debo quitar el check para que se quite la fila que se agrego...»

ASV.- Creo que la solución no debería estar ligada a añadir fila al activar la casilla y eliminar fila al desactivar la casilla, sino que al activar/desactivar la casilla solo cambie C. Pagadas y C. a pagar, en el formulario y NO en la hoja. Luego cuando los datos sean firmes y pulses Guardar sea cuando se agreguen los datos a la hoja y se limpia el formulario en espera de otro alumno.


(3) Si (por la causa que sea) prefieres guardar con el click, deberías hacer como en mi ejemplo pagos (llamada en el evento a subrutina común), te ahorrarías mucho código. Peeero... el evento Click NO se dispara cuando desactivas la casilla Ermm, el evento change se dispara en ambos casos


Opciones te ofrezco, ¡Tú decides!





Editado por AnSanVal - 18/Junio/2022 a las 13:17
Saludos desde Tenerife.
Arriba
eli1 Ver desplegable
Nuevo
Nuevo


Unido: 20/Julio/2022
Estado: Sin conexión
Puntos: 0
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita eli1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Julio/2022 a las 16:59
Cita Muy buenas tardes, espero estén muy bien
Aquí un reto para mi tal vez un segundo para mas de uno en este Foro

Estoy queriendo ingresar datos de manera fácil desde un formulario, es un pequeño control de pagos de un colegio para ello ya hice mi formulario, ahora hago unos filtros y me trae al alumno y me pone check en los checkbox que tiene el mes pagado por ejemplo si el alumno pago Febrero al cargar los datos se me cargar y se pone Check en el control lo verán a continuación.
Ahora mi problema radica en por ejemplo el alumno debe pagar 10 mensualidades a lo largo del año y si yo quiero pagar Marzo por ejemplo doy check en el CheckBox de Marzo y si quiere pagar Abril también y así con los otros meses pero ahora me gustaría ir capturando los datos en un array para luego completo pasarlo a la hora de excel.
Pero ahí es cuando comienza mi problema no se como hacerlo ya vi diferentes maneras pero ninguna se acerca a mi necesidad.


Por ejemplo mis campos en excel son estos
Fecha NumeroRecibo Estudiante Mes Monto
me gustaría que en memoria me cree ese arreglo con filas y columnas para después con un botton pasarlos a la hoja.
pero por ejemplo si pago hasta Julio, me tocaría agosto y septiembre o los meses que quiera pagar
por ejemplo si quiere pagar solo Julio que mi arreglo tenga con calculadora de horas, una fila con todas esas columnas y si quiere pagar dos meses que tenga dos filas
mis imágenes
Por ejemplo esta es la imagen cuando inicio el form prácticamente vacío

Bueno no pude subir mis imágenes.


Agradezco la colaboración


Hola compañero

Cada vez que se haga ckeck tienes que rellenar la matriz como este ejemplo:

Dim MyWeek, MyDay
MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
' Return values assume lower bound set to 1 (using Option Base
' statement).
MyDay = MyWeek(2)&&&&' MyDay contains "Tue".
MyDay = MyWeek(4)&&&&' MyDay contains "Thu".

Y con la la función UBound(MyWeek) te devolverá el numero máximo de elmentos.
Arriba
joaquin16 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 09/Marzo/2021
Localización: México
Estado: Sin conexión
Puntos: 13
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita joaquin16 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Julio/2022 a las 02:21
Pues yo lo planteo con un código de JavaScript:

var checkboxes = document.getElementById("form1").checkbox;
var cont = 0; 

for (var x=0; x < checkboxes.length; x++) {
 if (checkboxes[x].checked) {
  cont = cont + 1;
 }
}
___________________________
Trabajo con Tecnología de Mulesoft que agiliza la comunicación de varios sistemas.  


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable