jues publicado el 11 de octubre publicado el 11 de octubre (editado) Buenas noches estimados espero estén bien Dentro del Formulario VTL (frmvtl) estan los TextBox 16, 17, 18, 19, 20, 21, 22 los cuales necesito que cuando contengan un valor cualquiera la macro los tome como 1 (TextBox<>””=1) y cuando los TextBox estén vacíos la macro los tome como 0 (TextBox=””=0) seria como usar la Función Contar de Excel, siendo así y conforme al funcionamiento de la Macro Calculo en el TextBox23 en la medida que se van introduciendo los datos el conteo o suma debe reflejarse de manera automática y simultánea en los Textbox 25, 27, 28, 29, de la siguiente manera: TextBox25 = TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22 TextBox27 = TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22 TextBox28 = TextBox27 TextBox29 = TextBox21+TextBox22 Por último, necesito que el resultado de la siguiente formula: SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0))) Se refleje en el TextBox31 está formula ya la he utilizado en otras partes de mi proyecto dentro de un Funcion Select Case en conjunto con la Función Evaluate pero en este caso que es una única fórmula no sé cómo hacerla funcionar, el resultado esperado para el mes de Octubre es TextBox31 = 1 HHE PRUEBA.xlsm Editado el el 11 de octubre por jues
JSDJSD publicado el 12 de octubre publicado el 12 de octubre Si te explicas mejor y pones un ejemplo visual de lo que quieres conseguir, lo intentamos. 1
jues publicado el 14 de octubre Autor publicado el 14 de octubre (editado) En 12/10/2024 at 13:16 , JSDJSD dijo: Si te explicas mejor y pones un ejemplo visual de lo que quieres conseguir, lo intentamos. Saludos @JSDJSD espero estes bien haciendo el ejemplo visual que me pidió me percate que tenia un error en el planteamiento el cual procedo a corregir en este post, tengo dos casos en los cuales necesito que los TextBox vacios y llenos se cuenten de diferentes formas: Caso 1 (Imagen 01): Para los resultados de los TextBox 25, 27, 28 necesito que cuando los TextBox 16, 17, 18, 19, 20, 21, 22 estén llenos se cuenten como “1” (TextBox<>”” = 1) mientras que cuando los TextBox 16, 17, 18, 19, 20, 21, 22 estén vacíos se cuenten como “0” (TextBox =”” = 0) como si fuera la Función CONTAR de Excel finalmente los resultados deben mostrarse de manera automática y simultánea en los TexBox 25, 27, 28. TextBox25 = (TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22) TextBox27 = (TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22) TextBox28 = TextBox27 Caso 2 (Imagen 02): Para el resultado del TextBox 30 necesito que cuando los TextBox 21, 22 estén llenos se cuenten como “0” (TextBox<>”” = 0) mientras cuando que los TextBox 21, 22 estén vacíos se cuenten como “1” (TextBox =”” = 1) como si fuera la Función CONTAR.BLANCO de Excel finalmente el resultado debe mostrarse de manera automática y simultánea en el TextBox30. TextBox30 = (TextBox21+TextBox22) Por último, el TextBox29 pasa a a asumir un valor fijo = 2 (TextBox29 = 2) Entre tanto con esta fórmula: SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0))) Necesito que se ejecute de manera automática en la macro que corresponda y que el valor resultante se refleje en el TextBox31 HHE PRUEBA.xlsm Editado el el 14 de octubre por jues
JSDJSD publicado el 15 de octubre publicado el 15 de octubre hace 21 horas, jues dijo: Entre tanto con esta fórmula: SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0))) Necesito que se ejecute de manera automática en la macro que corresponda y que el valor resultante se refleje en el TextBox31 sube archivo con datos en dichas columnas para hacer pruebas
jues publicado el 15 de octubre Autor publicado el 15 de octubre hace 7 horas, JSDJSD dijo: Es esto lo que buscas ? Exacto eso es el resultado que busco. hace 7 horas, JSDJSD dijo: sube archivo con datos en dichas columnas para hacer pruebas En la única pestaña del archivo (USUARIOS & PRIVILEGIOS) hay una pequeña tabla que es el rango de búsqueda 'USUARIOS & PRIVILEGIOS'!$BS27:BS56 como la que se muestra en la Imagen adjunta de todos modos adjunto el archivo nuevamente HHE PRUEBA.xlsm
JSDJSD publicado el 16 de octubre publicado el 16 de octubre El propósito de tu formula que es saber los días feriados que se encuentran en la tabla correspondientes al mes actual?
JSDJSD publicado el 16 de octubre publicado el 16 de octubre Suponiendo que es esto lo que necesitas te dejo una posible solución 1
JSDJSD publicado el 16 de octubre publicado el 16 de octubre En formulario: Private Sub TextBox16_Change(): ContarTextBoxes: End Sub Private Sub TextBox17_Change(): ContarTextBoxes: End Sub Private Sub TextBox18_Change(): ContarTextBoxes: End Sub Private Sub TextBox19_Change(): ContarTextBoxes: End Sub Private Sub TextBox20_Change(): ContarTextBoxes: End Sub Private Sub TextBox21_Change(): ContarTextBoxes: End Sub Private Sub TextBox22_Change(): ContarTextBoxes: End Sub En módulo: Sub ContarTextBoxes() Dim Control As Control Dim contador As Integer Dim contador2 As Integer Dim i As Integer ' Inicializar contadores contador = 0 contador2 = 0 ' Recorrer los TextBox desde TextBox16 hasta TextBox22 For i = 16 To 22 Set Control = frmvtl.Controls("TextBox" & i) If Trim(Control.Value) <> "" Then ' Incrementar contador si hay datos contador = contador + 1 Control.BackColor = RGB(0, 255, 0) ' Verde si hay datos Else Control.BackColor = RGB(255, 255, 255) ' Blanco si no hay datos End If Next i ' Evaluar TextBox21 y TextBox22 para contador2 If Trim(frmvtl.Controls("TextBox21").Value) = "" Then contador2 = contador2 + 1 ' TextBox21 vacío End If If Trim(frmvtl.Controls("TextBox22").Value) = "" Then contador2 = contador2 + 1 ' TextBox22 vacío End If ' Mostrar resultados en los TextBox correspondientes frmvtl.Controls("TextBox25").Value = contador frmvtl.Controls("TextBox27").Value = contador frmvtl.Controls("TextBox28").Value = contador frmvtl.Controls("TextBox30").Value = contador2 ' Mostrar contador2 ActualizarTextBox End Sub Private Sub ActualizarTextBox() Dim rangoFechas As Range Dim fechaInicio As Date Dim fechaFin As Date Dim resultado As Long Dim i As Long Dim fechaActual As Date Dim mesActual As Long ' Define la hoja de trabajo With Sheets("USUARIOS & PRIVILEGIOS") ' Define el rango de fechas Set rangoFechas = .Range("BS27:BS56") ' Calcula el primer y último día del mes actual fechaInicio = WorksheetFunction.EoMonth(Date, -1) + 1 ' Primer día del mes actual fechaFin = WorksheetFunction.EoMonth(Date, 0) ' Último día del mes actual ' Inicializa el resultado resultado = 0 ' Obtiene el mes actual mesActual = Month(Date) ' Recorre las celdas para contar los días feriados del mes actual For i = 1 To rangoFechas.Rows.Count fechaActual = rangoFechas.Cells(i).Value ' Verifica si la fecha está dentro del mes actual If fechaActual >= fechaInicio And fechaActual <= fechaFin Then ' Cuenta el día si es un feriado (suponiendo que los feriados están en formato de fecha) resultado = resultado + 1 End If Next i End With ' Asigna el resultado al TextBox31 frmvtl.TextBox31.Value = resultado End Sub
jues publicado el 16 de octubre Autor publicado el 16 de octubre hace 13 horas, JSDJSD dijo: El propósito de tu formula que es saber los días feriados que se encuentran en la tabla correspondientes al mes actual? Saludos @JSDJSD espero estés bien excelente su solución funciona conforme a lo esperado salvo por un detalle con el que contestare su interrogante anterior respecto al mes. En la Hoja Excel donde ejecuto originalmente la formula: SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*( 'USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0))) Es un Reporte Mensual y por lo tanto es indiferente el día o la semana donde este ubicado el feriado sin embargo con su pregunta me percate que en este caso como es un Reporte Semanal si influye el día y la semana donde se ubique el feriado ya que hay semanas que son mixtas es decir se comparten entre dos meses y/o años diferentes como es el caso de las semanas donde se encuentran los días feriados correspondientes al 01/05/2024, 28/05/2024 y 31/12/2024 siendo así la macro solo debería contar el día feriado contenido en rango 'USUARIOS & PRIVILEGIOS'!$BS27:BS56 y reflejar un resultado en el TextBox31 si y solo si este feriado se encuentra en la semana comprendida entre los TextBox4 y TextBox5. Adjunto la versión funcional y casi definitiva de formulario. HHE PRUEBA.xlsm
jues publicado el 17 de octubre Autor publicado el 17 de octubre Buenos días @JSDJSD tal cual lo que colocas es la solución adecuada
Solution JSDJSD publicado el 17 de octubre Solution publicado el 17 de octubre El archivo HHE PRUEBA (3).xlsm 2
jues publicado el 17 de octubre Autor publicado el 17 de octubre Genial como siempre funciona perfecto mil gracias @JSDJSD
Recommended Posts
Conéctate para comentar
Podrás dejar un comentario después de conectarte
Conéctate ahora