Saltar al contenido

Cálculos en TextBox y Label.


pinoji

Recommended Posts

Buenos días Foristas. Una vez más por acá. Quizás más rápido de lo que yo hubiera querido, pero sigo teniendo problemas con los cálculos en VBA. Es algo que no acabo de aprender y necesito aprenderlo.

Acá en mi país cuando un trabajador se enferma y el Médico le da Reposo, emite un Certificado Médico, donde entre otros datos consigna los días a Descansar y la fecha Inicial cuando comienza ese Reposo. Imagino que en todos lados sea parecido, quizás difiera en el cálculo.

Yo quise automatizarle esto a mi esposa para que hiciera los cálculos de manera automática con sólo introducir los datos imprescindibles.

Primero: Declara el Salario devengado por cada uno de los últimos 12 meses y esto crea un Total de Salario. Esto lo logré hacer y funciona perfecto, porque lo que necesito es que se vaya mostrando en los TextBox o Label los resultados en Tiempo Real, pero hay otros cálculos que no he podido lograr, por ejemplo:

Promedio Mes que utilizo la función =SI.ERROR(PROMEDIO(D8:D19),"0.00")

Promedio Día que utilizo la función =SI.ERROR(D21/24,"0.00")

Días a Contar que utilizo =DIAS.LAB.INTL(H8,I8,11,I13) (en el cuarto argumento requiere del rango I13:I20)

Total Días a Pagar =F11-D23

Días x Promedio Días =SI.ERROR(F14*D22,"0.00")

Neto a Cobrar =SI.ERROR(F17*K9/100,"0.00")

El importe de los Meses se introduce manual, al igual que Fecha Inicio (Desde) y Fecha Final (Hasta), al igual que en No Considerar que son fechas de días Feriados, Festivos o simplemente No laborables (no incluye los domingos)

En el Combobox % a Aplicar defino el porciento que requiere el certificado según el Tipo.

En Días de Carencia se introduce manual. Esto son los 3 primeros días de cada certificado que no se les paga, a no ser que el certificado sea continuación de otro.

En la Hoja me funciona PERFECTAMENTE y obtengo lo que necesito, pero quiero hacerlo a través de VBA, pero no logro concretar los cálculos en los TextBox o Label. Esto es una asignatura que sigo teniendo pendiente pero que superaré.

Resumiendo, necesito me ayuden a que los TextBox TxtPromedioDia y TxtPromedioMes me vaya mostrando en Tiempo Real el resultado de las operaciones, así como en los 4 Label.

Aun no lo he terminado, pero con esto me estarían ayudando muchísimo.

Les agradecería su apoyo.

Gracias y que tengan un excelente día.

JIPM

Subsidio Foro .xlsm

Enlace a comentario
Compartir con otras webs

@pinoji , como veo que andas intentando aprender, antes de mirar tu fichero te doy la guía para hacer cálculos en VBA

Ten en cuenta que todos los datos que metas en TextBox o  Labels, siempre son Strings (texto), por lo que de alguna manera debes poder convertilos a números para poder operar con ellos.

La forma es declarar variables como números, y después asignárles los valores de los textbox o labels conviertiéndolos en numero. Con un eemplo lo verás más claro

Los tipos de números en que convertir depende de los que necesites. Si necesitas números con decimales, debes declararlos como Double, si no es así como Long.
 

Dim dias as Long, salario as Double

dias=Clng(TextBox1)
salario=Cdbl(TextBox2)

Aquí "Clng" es la función de VBA que convierte texto a Long (número sin decimales) y "Cdbl" la que convierte a Double.

Por cierto, cuando dimensionas a CADA variable le debes asignar su tipo. Si haces lo siguiente:

Dim salario as Double, diario, division

NO estas definiendo TODAS como Duble, las que no tienen valor SE DIMENSIONAN como "Variant" (por defecto VBA si no pones qué tipo de variable va a ser, y solo lo dimensionas como, por ejemplo "diario", lo hace como Variant.

Para trabajar con fechas, lo mejor es primero convertilars a "Long" (valor interno de las fechas en Excel), trabajar con ellas, y después devolver su valor con "Cdate" para devolver el valor de la fecha
 

Dim fecha1 as Long, fecha2 as Long

fecha1=Clng(TextBox1)
fecha2=Clng(TextBox)
.
.
operaciones con ellas (sumas, restas, etc)
.
.
TextBox3=Cdate(resultado de las operaciones)

A ver cómo se te da con esta pequeña ayuda ;)

Enlace a comentario
Compartir con otras webs

Buenos días Haplox. Espero que se encuentre bien de salud.

Muy interesante su comentario y por supuesto que es una tremenda ayuda, sobre todo para mi que apenas estoy comenzando con esto de VBA. Comenzaré a interiorizar y poner en practica estos elementos.

Pero sigo teniendo una duda; Como puedo en el Formulario que envié por ejemplo mientras voy declarando los salarios por meses, de manera automática y en tiempo real se vaya mostrando el el TextBox  correspondiente al Promedio Mes el resultado y así con el Promedio Días y los demás TextBox y Label como sucede con el Total de Salario.  En qué Evento lo declaro, cómo podría ser la sintaxis (...) porque para el Total de Salario con un poco de trabajo lo hice, pero he intentado con los demás y no puedo lograrlo.

Podrías ayudarme con un ejemplo para yo tener una referencia?

Gracias por atender mi duda y excelente fin de semana para ti y tu familia.

Saludos

Pino

Enlace a comentario
Compartir con otras webs

Hola Juanlui, buenas noches.

No entiendo a ciencias ciertas su pregunta. Creo entender que si conozco el Calendario EcoCalendario. Pues sí,  lo uso en mis proyectos y es muy fácil de usar. Consta de un Modulo, un Modulo Clase y un UserForm, los cuales los incluyes en tu proyecto y listo. Si esa es tu pregunta creo que está contestada, si es otra, por favor, dime y responderé con mucho placer. Usted me ayudó en su momento con una duda y creo estar en deuda con usted. Gracias por todo.

Saludos y excelente fin de semana.

JIPM

Enlace a comentario
Compartir con otras webs

Hace 4 horas, Janlui dijo:

Enigma, me permites conoce el calendario que mencionas EcoCalendario?

Gracias

Está en el mismo archivo publicado por @pinoji y es un aporte que hice hace tiempo en mi canal EcoExcel. De hecho hay una versión mejorada y me gustó mucho el desarrollo del mismo. Es fácil de usar y no ocupa tanto espacio.

Saludos.

Enlace a comentario
Compartir con otras webs

Enigma25, buenas noches. No conocía que usted estuviera al tanto de este Calendario y que además como dice "es un aporte que hice en mi canal EcoExcel..." Tenia entendido que era del Profesor David, pero no es la cuestión de mi comentario quien es o no el autor, lo que si quería comentar es que no se por qué razón me gustó este más que otros que me he encontrado, como el de Andrés Rojas Moncada, que por cierto es muy bueno, pero decidí usar este y me va bien, ahora me gustaría obtener esa versión mejorada. Podrías darme el link?

Gracias entonces por su aporte y acá tiene un seguidor y servidor.

Saludos.

Pino

Enlace a comentario
Compartir con otras webs

Hace 3 minutos , pinoji dijo:

Enigma25, buenas noches. No conocía que usted estuviera al tanto de este Calendario y que además como dice "es un aporte que hice en mi canal EcoExcel..." Tenia entendido que era del Profesor David, pero no es la cuestión de mi comentario quien es o no el autor, lo que si quería comentar es que no se por qué razón me gustó este más que otros que me he encontrado, como el de Andrés Rojas Moncada, que por cierto es muy bueno, pero decidí usar este y me va bien, ahora me gustaría obtener esa versión mejorada. Podrías darme el link?

Gracias entonces por su aporte y acá tiene un seguidor y servidor.

Un placer. Mi nombre es David Garcia y quien tiene el canal EcoExcel en Youtube y que tengo ese calendario para quienes lo deseen. Me doy a conocer como Enigma25 en el foro desde hace tiempo pero por temas de trabajo y demás, he dejado de participar pero le tengo un gran cariño a este foro porque me ha ayudado mucho y le debo tanto.

Aun no tengo los privilegios para aportar archivos pero espero que con el tiempo pueda dar mas aportes para que así, con el tiempo ya puedo adjuntar archivos.

De todos modos, el que usas, es básicamente el mismo. La mejora en si es de apariencia.

 

Enlace a comentario
Compartir con otras webs

Profesor, el placer es mío. Soy seguidor de su canal desde hace algún tiempo y he aprendido muchas cosas en él. No sabes a cuantas personas has ayudado al igual que este Foro que es excepcional, con miembros muy capaces, amables y sobre todo, tanto en usted como en este Foro el ALTRUISMO es una premisa. Yo verdaderamente admiro a aquellas personas que lo dan todo por ayudar a los demás. Por acá hay un grupo de personas (me incluyo, de hecho lo digo por mí) que desgraciadamente tenemos muchos problemas para acceder a Cursos On Line o tener una bibliografía acorde o una persona experta que lo guía y estos "espacios" vienen, de alguna manera, a "llenar" esos vacíos. Soy empírico, no se nada de Arquitectura, Algoritmo,  Programación estructurada, Pseudocódigos,  y  todos esos conceptos que se manejan en una Carrera Universitaria o quizás en Cursos, pero sí tengo el interés de aprender. Ya no tengo 20 años (tengo 56) y las capacidades de aprendizajes disminuyen mucho, las neuronas no son las mismas y hace apenas 9 meses que escribí mi primer código VBA y lo debo a los canales de YouTube y personas como ustedes. No son capaces de imaginas el trabajo que paso para poder hacer algo en Excel y VBA. No tengo Ordenador, poco tiempo, los apagones,  (...) pero aún así QUIERO aprender y me encuentro con personas como usted, Víctor Hernández (TOR-Code),  Carolina de Andrade, Andrés Rojas, Sergio Alejandro Campos, Antoni, JSD JSD, Haplox, Alexander, Jalui, Sergio Reigosa, Sergio el administrador de este Foro y muchos más presto a ayudar, a sacrificar su tiempo libre para atender nuestras dudas. En una ocasión lo dije y ahora lo repito, yo los considero Seres Superiores.

Pero bueno, basta charlas que este medio no es para eso. Agradecerle por sus aportes y que tenga una Excelente salud usted y su familia. Mi nombre es José Ignacio Pino Mondeja, vivo en Cuba, 56 años y me puede contactar por:     pinomondejajoseignacio@gmail.com.

Gracias a usted y todos los miembros del Foro

Enlace a comentario
Compartir con otras webs

Hace 17 horas, Enigma25 dijo:

Un placer. Mi nombre es David Garcia y quien tiene el canal EcoExcel en Youtube y que tengo ese calendario para quienes lo deseen. Me doy a conocer como Enigma25 en el foro desde hace tiempo pero por temas de trabajo y demás, he dejado de participar pero le tengo un gran cariño a este foro porque me ha ayudado mucho y le debo tanto.

Aun no tengo los privilegios para aportar archivos pero espero que con el tiempo pueda dar mas aportes para que así, con el tiempo ya puedo adjuntar archivos.

De todos modos, el que usas, es básicamente el mismo. La mejora en si es de apariencia.

 

@Enigma25Bueno saberlo que eres EcoExcel! Ahí me he tomado unos aportes que he encontrado en San Google, bueno y por el foro ya eres bastante bien conocido.

 

Los mejores éxitos en su vida.

Saludos

Enlace a comentario
Compartir con otras webs

A ver si entendí más o menos lo que necesitas. Para parte de la solución uso Función  de Otto Javier con alguna modificación.

'//////////////////////////////////////////////////////////////////
'// Función creada por Otto Javier González Diciembre de 2015
'// email: ottogonzalez@outlook.com
'// Canal de YouTube: https://www.youtube.com/ottojaviergonzalez
'//////////////////////////////////////////////////////////////////

Public Function Promediar(xForm As UserForm, xTextBoxName As String, xPromedio As Control)
Dim i As Control
Dim x As Double
Dim y As Double
    
On Error GoTo Errores
    
    For Each i In xForm.Controls
        If i.Name Like xTextBoxName & "*" Then
            If i <> Empty Then
                x = x + i
                y = y + 1
            End If
        End If
    Next
    
    xPromedio = 0
    xPromedio = FormatNumber(x / y, 1)
    FrmSubsidio.TxtTotalS = FormatNumber(x, 1)
Errores:
   Exit Function
   
End Function

 

Prueba.gif

Subsidio Foro .xlsm

Enlace a comentario
Compartir con otras webs

Buenas noches Foristas.

Buenas Noches JSD. Que bueno saber que estás ahí. Te has convertido en mi S.O.S y que privilegio para mí, aun sabiendo que  existe dentro de este Foro expertos con mucha experiencia y deseos de ayudar.

Voy a revisar con datos reales su propuesta, que de antemano creo es perfecta (no podía ser de otra manera), pero a priori vi algo que quizás no aclaré, o mejor dicho que no aclaré.  Acá se trabaja de Lunes a Sábado y se descansa los domingos y en la función Dias.Lab.Intl en el tercer argumento se define esto, que para mi caso es 11, pero tengo un rango de fechas que se llama No Considerar en el que agrego aquellas fechas como Feriados, Festivos, etc y que la función me va a descontar del total de los días. En la propuesta suya está:

Private Sub Hasta_Change()
     TotalDContar = Application.WorksheetFunction.NetworkDays_Intl(CDate(Desde), CDate(Hasta), 12, 17)
     If Carencia = "" Then Carencia = 0
     TotalDPagar = CDbl(TotalDContar) - CDbl(Carencia)
     TotalPDias = CDbl(TotalDPagar) * CDbl(TxtPromedioDia)
     If CmbAplicar = "" Then
        MsgBox "Debe marcar el porcentaje a aplicar"
        CmbAplicar.SetFocus
        CmbAplicar.BackColor = RGB(0, 255, 0)
        Exit Sub
     End If
     
     Neto = CDbl(TotalPDias) * CDbl(Left(CmbAplicar.Value, 2)) / 100
     Neto = FormatNumber(Neto)
End Sub

(...12, 17) y realmente no entiendo. Es que debo cambiar el 12 por 11?

y con el 17 qué hago? porque eso debe abarcar el rango I13:I20

Por favor, no lo tome a mal, pero más que resolver mi problema que ya se lo estoy agradeciendo, es más importante aprender, porque si no aprendo quedo en las mismas y yo necesito aprender.

Gracias mil. Mañana le escribo cuando haga una prueba con números reales, pero desde ahora mi agradecimiento.

Un abrazo.

JIPM

Enlace a comentario
Compartir con otras webs

Buenos días Foristas.

Buenos días JSD. Después de revisar con datos reales todo funciona perfecto excepto que me está dejando de contar un día. o sea,  todo parece indicar que el día que declaro en No Considerar no lo está tomando.

Saludos

JIPM 

Enlace a comentario
Compartir con otras webs

Buenas noches Foristas. Espero que se encuentren bien

Buenas noches JSD, igual para usted

Muchas Gracias JSD. Ese es el resultado que buscaba. Excelente su trabajo. No encuentro palabras para agradecer toda la ayuda que me ha brindado desde que inicié al Foro hasta hoy. Realmente lo aprecio y respeto mucho, al igual que el resto de los miembros de este Foro.

Doy el Tema por Cerrado.

Gracias a todos, en especial a usted y que tengan una excelente noche.

JIPM

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 97 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola, Ya he podido, reoslverlo. Por favor dar por terminado, este tema. Muchas gracias Mariano
    • Buenas a todos, trato de transponer o pivotar el archivo que adjunto. El archivo tiene 3 columnas ( en este caso, como pueden ser más 😞 Cód.artículo, Cód.características y Valor. El objetivo es dejar como primera columna el Cód.artículo y como fila de encabezado Cód.características, y luego cruzando datos con Valor. No sé si me he explicado bien Gracias de antemano. Libro1.xlsx
    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.